gpt4 book ai didi

c# - 如果 "b &= f();"是线程安全的,那么 "f()"是线程安全的吗?

转载 作者:行者123 更新时间:2023-11-30 14:49:11 26 4
gpt4 key购买 nike

给定一个 bool 值 b 和一个返回 bool 值的线程安全函数 f(),下一个语句是线程安全的:

b &= f();

这个想法是几个线程并行执行这条语句。如果其中一个有 f 返回 false,b 应该是 false。否则 b 为真。

我猜这不是原子的,可能发生一个线程读取 b,卡住,同时第二个线程读取 b,运行 f(),应用 &,然后第一个线程唤醒,运行 f() 并应用 & 使用旧 b .

保证给定线程,先运行f()然后读取b然后应用&?

最佳答案

没有;不能保证您会得到正确的结果:

  1. 第一个线程读取b(为true)
  2. 第二个线程读取b(为true)
  3. 第一个线程执行b & f()(并发现它true)
  4. 第二个线程执行b & f()(发现false)
  5. 第二个线程写回b(bfalse)
  6. 第一个线程写回 b(最后,btrue)

所以你必须同步访问

关于c# - 如果 "b &= f();"是线程安全的,那么 "f()"是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39292080/

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