15-сурет. Тосқауыл қоятын айнымалыларды пайдалана отырып, критикалық секцияларды іске асыру
Критикалық секциялармен жұмыс істеу үшін арнайы жүйе- лік шақырулар тұрып қалудың осындай жағдайларын жоюға мүмкіндік береді. Әртүрлі операциялық жүйелерде сәйкес функ- циялар әртүрлі іске асырылады, бірақ олардың қызметі мен қол- данылуы ұқсас. Егер ресурс бос емес болса, оны қажет ететін процесс циклдік сұранысты орындамайды, тек процесті ресурс- тың босатуын күту жағдайына ауыстыратын жүйелік функ- цияны шақырады. Ресурсты пайдаланып жатқан процесс крити- калық секциядан шыққаннан кейін ресурсты күтіп тұрған бірін-
37
белгісін орнатып, өзінің критикалық секциясын орындай баста- ды. Мұндай жағдайларды болдырмауда машинаның командалар жүйесінде бірыңғай «логикалық айнымалыны тексеру-орнату» операциясы болғаны жөн (мысалы, бұл x86 процессорларының BTC, BTR және BTS командалары арқылы іске асырылуы мүм- кін).
16-сурет. Критикалық секцияға кіру және одан шығудың жүйелік функцияла- рын пайдалана отырып, өзара шығаруды іске асыру
Ресурс бос емес кезінде ағын күту жағдайына ауысады және ресурс босағанда іске қосылуы керек деген белгі жасалады
38
ші процесті әзірлік жағдайына ауыстыратын жүйелік функ- цияны орындайды. 16-суретте Windows NT ОЖ-дағы функция- лардың көмегімен ағындарды синхрондау кезіндегі өзара шыға- руды іске асыру көрсетілген. D-бөлінетін ресурсты қажет ететін әрбір ағын екі жүйелік шақыруды: басқа ағынмен босатылған ресурсты алумен критикалық секцияға кіру және басқа ағын үшін ресурсты босатумен одан шығуды қамту керек. Критика- лық мәліметтерге қол жеткізуге себепкер ағын критикалық сек- цияға кіру үшін EnterCriticalSection жүйелік шақыруды орын- дайды. Осы шақырудың арнасында тосқауыл қоятын айнымалы- ны тексеру орындалады.
(ағын ресурстың босауын күтушілердің кезегіне қояды). Егер ресурс бос болса, ол (F(D):=0) оны пайдаланады, оның берілген ағынға жататындығы туралы белгі қойылады және ағын жұмы- сын жалғастырады. Ресурсты пайдаланып жатқан ағын крити- калық секциядан шыққаннан кейін LeaveCriticalSection жүйелік шақыруы орындалады. Нәтижесінде ресурс бос екендігі (F(D):=1) белгіленеді және бірінші ағын күтіп тұрған ресурстар- дың кезегінен ДАЙыН жағдайына ауысады. Әдістің ерекшелігі- не тоқталсақ, егер жұмыстың көлемі критикалық секцияда үл- кен емес және ресурсқа қол жетімділік ықтималдығы үлкен бол- са, шектеу қоятын айнымалылар әдісі тиімді (функцияларды ша- қыру шығыны есебінен).