Правильно ли используется Thread.MemoryBarrier ()?

Предположим, у меня есть поле, которое контролирует выполнение некоторого цикла:

private static bool shouldRun = true;

И у меня есть запущенный поток, имеющий код вида:

while(shouldRun) 
{
    // Do some work ....
    Thread.MemoryBarrier();
}

Теперь другой поток может установить shouldRun в false без использования какого-либо механизма синхронизации.

Насколько я понимаю Thread.MemoryBarrier (), наличие этого вызова внутри цикла while не позволит моему рабочему потоку получить кешированную версию shouldRun , и эффективно предотвратит возникновение бесконечного цикла.

Верно ли я понимаю Thread.MemoryBarrier? Учитывая, что у меня есть потоки, которые могут устанавливать переменную shouldRun (это нелегко изменить), это разумный способ гарантировать, что мои цикл остановится, как только shouldRun установлено в false любым потоком?

19
задан driis 4 January 2012 в 15:48
поделиться