Предположим, у меня есть поле, которое управляет выполнением некоторого цикла:
private static bool shouldRun = true;
И у меня есть поток, который имеет код вроде:
while(shouldRun)
{
// Do some work ....
Thread.MemoryBarrier();
}
Теперь другой поток может установить shouldRun
в false
, не используя какой-либо механизм синхронизации.
Насколько я понимаю Thread.MemoryBarrier(), этот вызов внутри цикла while будет препятствовать тому, чтобы мой рабочий поток получал кешированную версию shouldRun
и эффективно предотвращал бесконечный цикл.
Насколько я понимаю, что Thread.MemoryBarrier правильно? Учитывая, что у меня есть потоки, которые могут устанавливать переменную shouldRun
(это нелегко изменить), это разумный способ убедиться, что мой цикл остановится один раз shouldRun
установлен на false любым потоком?