Необходимость изменчивого модификатора при двойной проверке блокировки в .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

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