Гарантируют ли барьеры памяти новое чтение в C #?

Если у нас есть следующий код в C #:

int a = 0;
int b = 0;

void A() // runs in thread A
{
    a = 1;
    Thread.MemoryBarrier();
    Console.WriteLine(b);
}

void B() // runs in thread B
{
    b = 1;
    Thread.MemoryBarrier();
    Console.WriteLine(a);
}

MemoryBarriers убедитесь, что инструкция записи выполняется перед чтением. Однако гарантируется ли, что запись одного потока будет видна чтению другого потока? Другими словами, гарантируется ли, что хотя бы один поток печатает1 или обе нити могут распечатать0?

Я знаю, что уже существует несколько вопросов, которые имеют отношение к "свежести" иMemoryBarrier в C #, какэтот а такжеэтот, Однако большинство из них имеют дело с шаблоном записи-выпуска и чтения-получения. Код, размещенный в этом вопросе, очень специфичен для того, гарантируется ли просмотр записи чтением поверх того факта, что инструкции хранятся в порядке.

Ответы на вопрос(3)

Ваш ответ на вопрос