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