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


Простая гибридная блокировка



Download 6,27 Mb.
Pdf ko'rish
bet635/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   631   632   633   634   635   636   637   638   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Простая гибридная блокировка
Начнем с демонстрации примера гибридной блокировки в рамках синхронизации 
потоков:
internal sealed class SimpleHybridLock : IDisposable {
// Int32 используется примитивными конструкциями 


855
Простая.гибридная.блокировка
// пользовательского режима (Interlocked-методы)
private Int32 m_waiters = 0;
// AutoResetEvent - примитивная конструкция режима ядра
private AutoResetEvent m_waiterLock = new AutoResetEvent(false);
public void Enter() {
// Поток хочет получить блокировку
if (Interlocked.Increment(ref m_waiters) == 1)
return; // Блокировка свободна, конкуренции нет, возвращаем управление
// Блокировка захвачена другим потоком (конкуренция),
// приходится ждать.
m_waiterLock.WaitOne(); // Значительное снижение производительности
// Когда WaitOne возвращет управление, этот поток блокируется
}
public void Leave() {
// Этот поток освобождает блокировку
if (Interlocked.Decrement(ref m_waiters) == 0)
return; // Другие потоки не заблокированы, возвращаем управление
// Другие потоки заблокированы, пробуждаем один из них
m_waiterLock.Set(); // Значительное снижение производительности
}
public void Dispose() { m_waiterLock.Dispose(); }
}
Класс 
SimpleHybridLock
содержит два поля: одно типа 
Int32
, управляе-
мое примитивными конструкциями пользовательского режима, и второе типа 
AutoResetEvent
, являющееся примитивной конструкцией режима ядра. Чтобы 
добиться более высокой производительности, при блокировании нужно пытаться 
использовать поле 
Int32
и по возможности не использовать поле 
AutoResetEvent

Поле 
AutoResetEvent
создается при конструировании объекта 
SimpleHybridLock
и является причиной значительного снижения производительности, особенно по 
сравнению с полем 
Int32
. Далее в этой главе рассматривается еще одна гибридная 
конструкция (
AutoResetEventSlim
), которая не создает поля 
AutoResetEvent
до 
возникновения конкуренции со стороны потоков, одновременно пытающихся до-
биться права на блокирование. Закрывающий поле 
AutoResetEvent
метод 
Dispose
также значительно снижает производительность.
Как ни заманчиво выглядит задача повышения производительности при соз-
дании и освобождении объекта 
SimpleHybridLock
, лучше сосредоточиться на его 
методах 
Enter
и 
Leave
, вызываемых за время жизни объекта бессчетное количество 
раз. Давайте рассмотрим их подробно.
Первый вызвавший метод 
Enter
поток заставляет метод 
Interlocked.Incre-
ment
увеличить поле 
m_waiters
на 1, сделав его значение равным единице. Поток 
обнаруживает, что прежде потоков, ожидающих права на данное блокирование, 
не было, поэтому после вызова метода 
Enter
он возвращает управление. Здесь 


856
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   631   632   633   634   635   636   637   638   ...   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