Всегда ли этот (volatile bool) потокобезопасен?

Мне интересно, является ли это полностью потокобезопасным и нужно ли использовать ключевое слово volatile.

using System.Threading;

class Program
{
    private static volatile bool _restart = true;

    private static void Main()
    {
        while (_restart)
        {
            // Do stuff here every time for as long as _restart is true
            Thread.Sleep(1);
        }
    }

    private static void SomeOtherThread()
    {
        Thread.Sleep(1000);
        _restart = false;
    }
}

Думаю, да, но я хочу еще раз проверить, так как я не уверен на 100%, я просто хочу быть уверенным.

Я думаю, что ключевое слово volatile необходимо, потому что в этом случае невозможно будет кэшировать значение в регистрах или проводить подобные оптимизации.

22
задан Aidiakapi 8 January 2012 в 17:08
поделиться