fbh*_*dev 5 .net sql t-sql sql-server multithreading
我正在研究多线程应用程序(C#),并且2个线程同时使用NOLOCK更新表,这是一个问题吗?更具体地说,他们都在更新相同的记录.
答案是“这取决于”。
NOLOCK 允许“脏读”。这意味着在一个事务中,您可能会看到另一个事务中未提交的数据。如果您有多个线程更新同一个表中的同一行,则在该线程提交其事务之前,您可能会看到另一个线程接触的数据的修改值。
例如,以表 account_balances 为例,其定义为 (account_num int, 余额小数(12,2))。我们假设发生以下情况:
// 前提条件,账户 #1 的余额为 10.00
// 账户余额现在是 -5,尽管它应该是 5。
您不会看到字段内某种形式的不一致数据 - nolock 提示不像在没有锁的情况下运行多线程代码 - 各个写入仍然是原子的。