Потребность в энергозависимом модификаторе при двойной проверке блокировки в .NET

В нескольких текстах говорится, что при реализации двойной проверки блокировки в .NET к полю, к которому вы привязываетесь, должен применяться модификатор volatile. Но почему именно? Рассматривая следующий пример:

public sealed class Singleton
{
   private static volatile Singleton instance;
   private static object syncRoot = new Object();

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null) 
         {
            lock (syncRoot) 
            {
               if (instance == null) 
                  instance = new Singleton();
            }
         }

         return instance;
      }
   }
}

почему неlock (syncRoot) " достичь необходимой согласованности памяти? Isn»Правда ли, что после "замок" оператор чтения и записи будет изменчив, и поэтому будет достигнута необходимая последовательность?

Ответы на вопрос(8)

Ваш ответ на вопрос