gpt4 book ai didi

.net - NOLOCK 与多线程

转载 作者:行者123 更新时间:2023-12-02 23:42:44 24 4
gpt4 key购买 nike

我正在开发一个多线程应用程序 (C#),并且 2 个线程同时使用 NOLOCK 更新表,这是一个问题吗?更具体地说,它们都更新相同的记录。

最佳答案

答案是“视情况而定”。

NOLOCK 允许“脏读”。这意味着在一个事务中,您可能会看到来自另一个事务的未提交数据。如果您有多个线程更新同一个表中的同一行,则在该线程提交其事务之前,您可能会看到另一个线程接触的数据的修改值。

例如,以表 account_balances 为例,其定义为 (account_num int, 余额小数(12,2))。让我们假设发生以下情况:

//前提条件,账户 #1 的余额为 10.00

  1. 线程 #1 启动事务,将账户 #1 减少 10
  2. 线程 #2 启动事务,尝试读取帐户 #1 的余额。读取余额为 0。
  3. 线程 #2 将帐户减少 5 美元,并向客户 overdraw (其余额为 -5)
  4. 线程 #1 回滚其事务
  5. 线程 #2 提交其事务

//帐户余额现在为 -5,尽管它应该是 5。

不会看到字段内某种形式的不一致数据 - nolock 提示不像在没有锁的情况下运行多线程代码 - 各个写入仍然是原子的。

关于.net - NOLOCK 与多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com