是bool读写原子C#
-
09-06-2019 - |
题
访问 bool 领域的原子C#?特别是,我需要把锁周围:
class Foo
{
private bool _bar;
//... in some function on any thread (or many threads)
_bar = true;
//... same for a read
if (_bar) { ... }
}
其他提示
如上所述bool是原子但是你仍然需要记住,这也取决于你想要做什么。
if(b == false)
{
//do something
}
是不是一个 原子操作意义,b值可能会改变当前线执行代码之后,如果声明。
bool访问确实是原子,但这并不是整个故事。
你不必担心读一价值,是未完全写入'-还不清楚是什么可能意味着为一个bool在任何情况下-但你不必担心处理缓存,至少如果详细的时间是一个问题。如果线#1个运行的核心的一个拥有你的 _bar
在缓和 _bar
得到更新的线#2的上运行的另一个核心、线#1会看不到立即改变,除非你增加锁,宣布 _bar
作为 volatile
, 或插入明确呼吁 Thread.MemoryBarrier()
无效的缓存的价值。
这办法我有用,我认为是正确的,是
volatile bool b = false;
.. rarely signal an update with a large state change...
lock b_lock
{
b = true;
//other;
}
... another thread ...
if(b)
{
lock b_lock
{
if(b)
{
//other stuff
b = false;
}
}
}
我们的目标基本上是为了避免repetively锁上的对象每次迭代,只是为了检查,如果我们需要把它锁在了提供大量的状态变化的信息很少发生。我 想想 这种方法的工作。如果绝对的一致性是必需的,我 想想 易失性将是合适的时在b bool。
不隶属于 StackOverflow