Я изменил программу, заданную для Неблокирующая синхронизация , следующим образом:
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.
>> они означают барьеры памяти.
Даже если я уберу барьеры памяти, выходной сигнал не изменится. и это не гарантирует, что если условие в результате будет истинным.
я истолковал это неправильно?
Спасибо.