sql server会自动解决经典的读者 - 作家困境吗?

时间:2012-02-10 15:32:30

标签: sql-server computer-science

我正在学习操作系统类,我们刚刚了解了'readers and writers' 问题:如何处理想要从同一内存中读取和写入的多个进程(同时)?我还在处理这个问题的一个版本:我正在编写一个需要多个用户读写共享SQL服务器数据库的应用程序。因为“读者和作者”的问题似乎得到了很好的理解和讨论,我假设微软已经为我解决了这个问题。这意味着,我不需要担心设置权限或配置SQL服务器以确保人们不会同时读取和写入数据库。具体来说,我可以假设,默认情况下使用SQL Server 2005:

  1. 当另一个进程正在编写时没有进程读取
  2. 没有两个进程同时写入

2 个答案:

答案 0 :(得分:3)

作者将至少对他们正在修改的行进行独占X锁定,并将保持这一点直到他们的事务提交为止。 X锁与其他X锁不兼容,因此两个编写器不能同时修改同一行。

读取器将(默认读取已提交的隔离级别)获取共享锁,并在读取数据后立即释放。这与X锁不兼容,因此读者必须等待写入事务才能读取修改后的数据。 SQL Server也有snapshot isolation,其中读者不会被作者阻止,而是读取该行的早期版本。

答案 1 :(得分:2)

像MS-SQL这样的经典SQL Server使用悲观方法并锁定行,表或页面,直到写入操作完成。你真的没有必要应付这个,因为 - 如你所说 - 创作者已经解决了这个问题。看一下this article的第一个信息,任何数据库书都会深入探讨这个问题。如果您对此主题感兴趣,我建议您阅读Connolly和Begg的“数据库系统”。