для получения дополнительной информации о заборах памяти
м, у меня есть свойство, чей установщик защищен блокировкой, но без какой-либо блокировки вокруг получателя, например,
private long _myField;
public long MyProperty
{
get { return _myField; }
set { lock(whatever) _myField = value; }
}
В дополнение к синхронизации записи (но не чтения), блокировка, а точнее Monitor.Exit, должна вызыватьлетучая запись, Давайте теперь скажем, что у нас есть два потока A и B, и происходит следующая последовательность:
A читает текущее значениеMyProperty
.B записывает новое значение вMyProperty
.A читает текущее значениеMyProperty
очередной раз.Q: А теперь гарантированно увидеть новое значение? Или наша блокировка просто гарантирует, что B своевременно записывает в основную память, а другие потоки не читают новое значение? Или же ответ может зависеть от того, работаем ли мы в .Net 2+ или в «более слабой» реализации ECMA?