Разработка многопоточных приложений. Рудалев В.Г - 16 стр.

UptoLike

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