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


Библиотеки классов и безопасность потоков



Download 6,27 Mb.
Pdf ko'rish
bet611/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   607   608   609   610   611   612   613   614   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Библиотеки классов и безопасность потоков
А сейчас хотелось бы сказать несколько слов о библиотеках классов и синхрони-
зации потоков. Библиотека FCL разработки Microsoft гарантирует безопасность 
в отношении потоков всех статических методов. Это означает, что одновременный 
вызов статического метода двумя потоками не приводит к повреждению данных. 
Механизм защиты реализован внутри FCL, поскольку нет способа обеспечить 
блокирование сборок различных производителей, спорящих за доступ к ресурсу. 


823
Библиотеки.классов.и.безопасность.потоков
Класс 
Console
содержит статическое поле, по которому многие из его методов 
устанавливают и снимают блокировку, гарантируя, что в каждый момент времени 
доступ к консоли будет только у одного потока.
Кстати, создание метода, безопасного в отношении потоков, не означает, что 
внутренне он реализует блокирование в рамках синхронизации потоков. Просто этот 
метод предотвращает повреждение данных при попытке одновременного доступа 
к ним со стороны нескольких потоков. Класс 
System.Math
обладает статическим 
методом 
Max
, который реализован следующим образом:
public static Int32 Max(Int32 val1, Int32 val2) {
return (val1 < val2) ? val2 : val1;
}
Этот метод безопасен в отношении потоков, хотя в нем нет никакого кода бло-
кирования. Так как тип 
Int32
относится к значимым, два значения этого типа при 
передаче в переменную 
Max
копируются, а значит, разные потоки могут одновре-
менно обращаться к данной переменной. При этом каждый поток будет работать 
с собственными данными, изолированными от всех прочих потоков.
В то же время FCL не гарантирует безопасности в отношении потоков экзем-
плярным методам, так как введение в них блокирующего кода слишком сильно 
сказывается на производительности. Более того, если каждый экземплярный метод 
начнет выполнять блокирование и разблокирование, все закончится тем, что в при-
ложении в каждый момент времени будет исполняться только один поток, что еще 
больше снизит производительность. Как уже упоминалось, поток, конструирующий 
объект, является единственным, кто имеет к нему доступ. Другим потокам данный 
объект недоступен, а значит, при вызове экземплярных методов синхронизация не 
требуется. Однако если потом поток предоставит ссылку на объект (поместив ее 
в статическое поле, передав ее в качестве аргумента состояния методу 
ThreadPool.
QueueUserWorkItem
или объекту 
Task
и т. п.), то тут синхронизация уже понадо-
бится, если разные потоки попытаются одновременно получить доступ к данным 
не только для чтения.
Собственные библиотеки классов рекомендуется строить по этому паттер-
ну — то есть все статические методы следует сделать безопасными в отношении 
потоков, а экземплярные методы — нет. Впрочем, следует оговорить, что если це-
лью экземплярного метода является координирование потоков, его тоже следует 
сделать безопасным в отношении потоков. К примеру, один поток может отменять 
операцию, вызывая метод 
Cancel
класса 
CancellationTokenSource
, а другой по-
ток, делая запрос к соответствующему свойству 
IsCancellationRequested
объекта 
CancellationToken
, может обнаружить, что отмена на самом деле не нужна. Внутри 
этих экземплярных методов содержится специальный код синхронизации потоков, 
гарантирующий их скоординированную работу
1
.
1
Поле, к которому осуществляют доступ оба члена, помечается ключевым словом volatile, 
о котором мы поговорим чуть позже.



Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   607   608   609   610   611   612   613   614   ...   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