我修改了在非阻塞同步上给出的程序如下:
class DemoProg
{
int _answer;
bool _complete;
public void StartDemo()
{
Thread t1 = new Thread(A);
Thread t2 = new Thread(B);
t1.Start();
// Thread.Sleep(100); // To ensure that B is called after A.
t2.Start();
}
void A()
{
for (int i = 0; i < 1000000; i++)
_answer = 123;
Thread.MemoryBarrier(); // Barrier 1
_complete = true;
Thread.MemoryBarrier(); // Barrier 2
Console.WriteLine("Exiting A");
}
void B()
{
//Thread.Sleep(100);
Thread.MemoryBarrier(); // Barrier 3
if (_complete)
{
Thread.MemoryBarrier(); // Barrier 4
Console.WriteLine(_answer);
}
Console.WriteLine("Exiting B");
}
}
文章指出they ensure that if B ran after A, reading _complete would evaluate to true.
>> 它们意味着内存屏障。
即使我消除了内存障碍,输出也没有变化。并且不确定条件是否为真。
我是否以错误的方式解释它?
谢谢。