Net framework 5, а также среды Visual Studio 2012 и C#


Блокировка с двойной проверкой



Download 6,27 Mb.
Pdf ko'rish
bet649/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   645   646   647   648   649   650   651   652   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Блокировка с двойной проверкой
Существует известный прием, называемый 
блокировкой с двойной проверкой
(double-check locking). К нему прибегают, если нужно отложить создание одноэле-
ментного объекта до тех пор, пока он не потребуется приложению — иногда это 
называют 
отложенной инициализацией
(lazy initialization). Без запроса объект 
никогда не создается, что экономит время и память. Проблемы могут возникнуть 
при одновременном запросе объекта несколькими потоками. Чтобы в результате 
у вас появился всего один объект, потребуется применение некоторого способа 
синхронизации потоков.
Этот прием известен вовсе не благодаря своей выдающейся интересности или 
полезности, просто о нем очень много писали. Раньше он часто применялся при про-
граммировании на Java, но позже обнаружилось, что Java не гарантирует стопроцент-
ной работоспособности результата. Документ с описанием этой проблемы находится 
по адресу 
www cs umd edu/~pugh/java/memoryModel/DoubleCheckedLocking html
.
Думаю, вы будете рады узнать, что благодаря модели памяти и доступу к во-
латильным полям (см. главу 29) CLR прекрасно поддерживает блокирование 
с двойной проверкой. Вот код, демонстрирующий реализацию данной техники 
на языке C#:
internal sealed class Singleton {
// Объект s_lock требуется для обеспечения безопасности 
// в многопоточной среде. Наличие этого объекта предполагает, 
// что для создания одноэлементного объекта требуется больше 
// ресурсов, чем для объекта System.Object и что эта процедура
// может вовсе не понадобиться. В противном случае проще и эффективнее 
// получить одноэлементный объект в конструкторе класса
private static readonly Object s_lock = new Object();
// Это поле ссылается на один объект Singleton
private static Singleton s_value = null;
// Закрытый конструктор не дает внешнему коду создавать экземпляры
private Singleton() {
// Код инициализации объекта Singleton
}
продолжение



876
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   645   646   647   648   649   650   651   652   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish