As barreiras de memória garantem uma nova leitura em C #?

Se tivermos o seguinte código em 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);
}

oMemoryBarriers verifique se a instrução de gravação ocorre antes da leitura. No entanto, é garantido que a gravação de um thread seja vista pela leitura no outro thread? Em outras palavras, é garantido que pelo menos um segmento imprima1 ou ambos os fios podem imprimir0?

Eu sei que já existem várias perguntas relevantes para a "frescura" eMemoryBarrier em c #, comoesta eesta. No entanto, a maioria deles lida com o padrão de liberação de gravação e aquisição de leitura. O código publicado nesta pergunta é muito específico para garantir que uma gravação seja vista por uma leitura, além do fato de que as instruções são mantidas em ordem.

questionAnswers(3)

yourAnswerToTheQuestion