ВУЗ:
Составители:
Рубрика:
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
