Необходимость изменчивого модификатора при двойной проверке блокировки в .NET.C#

Место общения программистов C#
Ответить
Anonymous
 Необходимость изменчивого модификатора при двойной проверке блокировки в .NET.

Сообщение Anonymous »

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

Код: Выделить всё

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)» не обеспечивает необходимую согласованность памяти? Разве не правда, что после оператора блокировки и чтение, и запись будут нестабильными, и поэтому будет достигнута необходимая согласованность?

Подробнее здесь: https://stackoverflow.com/questions/196 ... ing-in-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»