2013-03-01 2 views
0

Есть ли способ, вместо того, чтобы блокировать объект, показать его временную копию тому, кто обращается к нему?Наличие копии объекта вместо заблокированного

+1

Не на том внутреннем уровне _I думаю, о чем вы спрашиваете. Я понимаю вашу потребность и считаю, что современный функциональный язык (возможно, Clojure) может предложить такие современные и в то же время методологии потребления памяти на очень внутреннем уровне. Я предлагаю вам написать себе созвездие неизменных объектов и создать для них всевозможные конструкторы вариаций, и это может быть так. Но вам придется писать их. .NET не предлагает готовое решение для такого желания ... –

ответ

2

Оберните код, который использует этот объект, который в вашем случае является критическим ресурсом, с TransactionScope и установите значение IsolationLevel для моментального снимка.

Таким образом, каждый, кто пытается получить доступ к одному и тому же объекту, должен увидеть значение перед редактированием объекта, пока транзакция не будет завершена.

0

Вы можете избежать временных копий, если используете модификатор volatile.

Система всегда считывает текущее значение изменчивого объекта в запрашиваемой точке, даже если предыдущая команда запрашивала значение от одного и того же объекта. Кроме того, значение объекта записывается сразу при назначении. Модификатор volatile обычно используется для поля, к которому обращаются несколько потоков, без использования оператора блокировки для сериализации доступа. Использование изменчивого модификатора гарантирует, что один поток извлекает самое современное значение, написанное другим потоком.

Смежные вопросы