ВУЗ:
Составители:
Рубрика:
16
В заключение кратко охарактеризуем некоторые другие методы синхро -
низации.
Семафоры регулируют число потоков, которые могут использовать ресурс.
Исключающий семафор (mutex, мьютекс) допускает к ресурсу только один поток,
обычные семафоры допускают конечное число потоков. Семафоры и мьютексы
во многом похожи на критические секции, методика их использования практиче-
ски полностью совпадает с методикой, рассмотренной выше. Преимуществом по
сравнению с критическими секциями является , прежде всего, глобальность дей -
ствия , т.е. способность блокировать потоки, запущенные всеми активными при-
ложениями. Кроме того, при обращении к семафорам и мьютексам можно указы -
вать максимальное время ожидания доступа к ресурсу , что позволяет предотвра-
щать ситуацию «тупиков».
Мьютекс создается функцией
function CreateMutex(
Attr: Pointer; // указатель на атрибуты безопасности
flag: Boolean; // флаг создания
lpName: PChar // указатель на имя мьютекса
): THandle; // дескриптор мьютекса
Стандартный вариант создания :
hMutex := CreateMutex(Nil, False, Nil);
Мьютексы могут находиться в сигнальном (если им не владеет ни один по-
ток, т.е. ресурс свободен) или несигнальном состоянии (поток владеет мьютек-
сом). Чтобы поток завладел мьютексом (т.е. получил доступ к ресурсу ), необхо-
димо вызвать функцию ожидания
function WaitForSingleObject(
hHandle: THandle; // дескриптор мьютекса
dwMilliseconds: DWord // время ожидания в мс
): DWord;
В заклю чениекратко охарактеризуем некоторы едруг иеметоды синхро- низации. Семаф оры рег улирую тчисло п отоков, которы емог утисп ользовать ресурс. И склю ча ю щи й сем а ф ор (mutex, м ью т екс) доп ускаетк ресурс у только один п оток, обычн ые сем а ф ор ы доп ускаю т конечное число п отоков. Семаф оры имью тексы во мног ом п охож инакритическиесекции, методикаих исп ользования п рактиче- скип олностью совп адаетсметодикой, рассмотренной вы ш е. П реимущ еством п о сравнению скритическимисекциямиявляется, п реж де всег о, г лоб альность дей- ствия, т.е. сп особ ность б локировать п отоки, зап ущ енны е всемиактивны мип ри- лож ениями. К рометог о, п риоб ращ ениик семаф орам имью тексам мож но указы - вать максимальное время ож идания доступ ак ресурсу, что п озволяет п редотвра- щ ать ситуацию « туп иков». М ьюте кс создается ф ункцией function CreateMutex( Attr: Pointer; // указатель на атрибуты безопасности flag: Boolean; // флаг создания lpName: PChar // указатель на имя мьютекса ): THandle; // дескриптор мьютекса Стандартны й вариантс оздания: hMutex := CreateMutex(Nil, False, Nil); М ью тексы мог утнаходиться в сиг нальном (еслиим невладеетниодин п о- ток, т.е. ресурссвоб оден) или несиг нальном состоянии (п оток владеет мью тек- сом). Ч тоб ы п оток завладел мью тексом (т.е. п олучил доступ к ресурсу), необ хо- димо вы звать ф ункцию ож идания function WaitForSingleObject( hHandle: THandle; // дескриптор мьютекса dwMilliseconds: DWord // время ожидания в мс ): DWord; 16