Re[3]: Каков механизм write barrier
От: kkav Россия  
Дата: 21.05.04 08:06
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, mihailik, Вы писали:


M>>Ещё немного из свежего блога:


M>>volatile and MemoryBarrier() Brad Adams Blog

S> Спасибо. Нужно будет попобовать.

По указанной ссылке написано:
 public static Singleton Value {
    get {
        if (Singleton.value == null) {
            lock (syncRoot) {
                if (Singleton.value == null) {
                    Singleton newVal = new Singleton();
                    // Insure all writes used to construct new value have been flushed. 
                    System.Threading.Thread.MemoryBarrier(); 
                    Singleton.value = newVal;         // publish the new value 
                }
            }
        }
        return Singleton.value;
    }
}


Почему System.Threading.Thread.MemoryBarrier();
Выполняется до Singleton.value = newVal;
а не после него, если мы боимся, что к моменту выполнения
другим потоком (lock (syncRoot) { if (Singleton.value == null) ...)
Singleton.value еще не будет еще присвоено?
Не логичнее ли высвободить кэш после присвоения?
... << RSDN@Home 1.1.3 beta 2 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.