易变的写/读是否确保“附近”字段的可见性?

问题描述 投票:0回答:0

只是一个简单的例子。不用解释

lock
Interlocked
等等。

bool 表示

state
的值是否可用。
state
并且 bool 之后没有进一步修改。

int state;
volatile bool stateAvailable;

Thread A:
while(!stateAvailable) { sleep }
read state

Thread B:
state = 5;
stateAvailable = true;

这是否确保线程 A 始终正确读取状态?我对这里的保证感到困惑(仅针对这个简单的例子):

  • 易失性写入是否会确保之前的操作已经发生,而易失性读取是否会确保之后的操作不会发生,从而同步处理器状态?
  • 或者,volatile write/read only 是否会确保编译器不会优化线程 A 的 bool-check,并且它对
    state
    的可能过时值没有影响?

如果你能指出这个问题的副本,我也会很感激。

c# volatile memory-barriers
© www.soinside.com 2019 - 2024. All rights reserved.