А.В. Столяров - Введение в операционные системы (1114673), страница 33
Текст из файла (страница 33)
Ñïåöèàëüíî àêöåíòèðîâàòü íà ýòîì âíèìàíèå ìû íå áóäåì, ò.ê. ó ýòèõïîäõîäîâ åñòü è äðóãèå íåäîñòàòêè.27.3.1Áëîêèðîâî÷íàÿ ïåðåìåííàÿÏóñòü èìåþòñÿ íåêîòîðûå äàííûå, äîñòóï ê êîòîðûì îñóùåñòâëÿþòíåñêîëüêî ïðîöåññîâ. Çàâåäåì â ðàçäåëÿåìîé ïàìÿòè öåëî÷èñëåííóþ ïåðåìåííóþ (áóäåì íàçûâàòü åå s) è ïðèìåì ñîãëàøåíèå, ÷òî çíà÷åíèå ïåðåìåííîé 1îçíà÷àåò, ÷òî ñ ðàçäåëÿåìûìè äàííûìè íèêòî íå ðàáîòàåò, à çíà÷åíèå 0 − ÷òîîäèí èç ïðîöåññîâ â íàñòîÿùåå âðåìÿ ðàáîòàåò ñ ðàçäåëÿåìûìè äàííûìè èíåîáõîäèìî ïîäîæäàòü, ïîêà îí íå çàêîí÷èò.
Ïðè çàïóñêå ñèñòåìû ïðèñâîèìïåðåìåííîé s çíà÷åíèå 1. Äîñòóï ê äàííûì áóäåì îñóùåñòâëÿòü ñëåäóþùèìîáðàçîì:2 Åñëèòàêèå ïðåäïîëîæåíèÿ åñòü, â óñëîâèÿõ ìóëüòèçàäà÷íîé ñèñòåìû âñåãäà ìîæåò ïîëó÷èòüñÿ ñèòóàöèÿ, êîòîðàÿ â ýòè ïðåäïîëîæåíèÿ íå âïèøåòñÿ: íàïðèìåð, îäèí èç ïðîöåññîâ ìîæåò îêàçàòüñÿ ïðèîñòàíîâëåí ñðàçó ïîñëå íà÷àëà î÷åðåäíîãî êâàíòà âðåìåíè èç-çà íàëè÷èÿ â ñèñòåìå ïðîöåññà ñ áîëåå âûñîêèìïðèîðèòåòîì, à äðóãîìó ïðîöåññó ïðè ýòîì ïîâåçåò áîëüøå, â èòîãå îí áóäåò âûïîëíÿòüñÿ â ðàçû (èëèäàæå íà íåñêîëüêî ïîðÿäêîâ) áûñòðåå3  ðåàëüíîñòè ýòî ïðàâèëî èíîãäà íàðóøàåòñÿ, åñëè åñòü óâåðåííîñòü â íåáîëüøîì âðåìåíè îæèäàíèÿ;ïî âîçìîæíîñòè, îäíàêî, àêòèâíîãî îæèäàíèÿ ñëåäóåò èçáåãàòü151while(s == 0) {} /* ïóñòîé öèêë, ïîêà íåëüçÿ âõîäèòüâ êðèòè÷åñêóþ ñåêöèþ */s = 0;/* çàïðåòèëè äîñòóï äðóãèì ïðîöåññàì */section(); /* ...
ðàáîòà ñ ðàçäåëÿåìûìè äàííûìè ... */s = 1;/* ðàçðåøèëè äîñòóï */Åñëè âñå ïðîöåññû, êîòîðûì íóæåí äîñòóï ê ýòèì äàííûì, áóäóò ñëåäîâàòüòàêîé ñõåìå, âîçíèêàåò îùóùåíèå, ÷òî îêàçàòüñÿ îäíîâðåìåííî â êðèòè÷åñêîéñåêöèè (â ïðèìåðå îíà ïîêàçàíà âûçîâîì ôóíêöèè section()) äâà ïðîöåññàíå ìîãóò − âåäü åñëè îäèí èç ïðîöåññîâ ñîáðàëñÿ âîéòè â ñåêöèþ, îí ïðåäâàðèòåëüíî çàíîñèò 0 â ïåðåìåííóþ s, ÷òî çàñòàâèò ëþáîé äðóãîé ïðîöåññ,èìåþùèé íàìåðåíèå çàéòè â êðèòè÷åñêóþ ñåêöèþ, ïîäîæäàòü, ïîêà ïåðâûéïðîöåññ íå çàêîí÷èò ðàáîòó â ñåêöèè è íå çàíåñåò â s ñíîâà çíà÷íåèå 1.Ê ñîæàëåíèþ, íå âñå òàê ïðîñòî.
Âûïîëíåíèå ïðîöåññà ìîæåò áûòü ïðåðâàíî òî÷íî â òîò ìîìåíò, êîãäà îí óæå óâèäåë ÷èñëî 1 â ïåðåìåííîé sè âûøåë èç öèêëà while, íî ïðèñâîèòü ïåðåìåííîé çíà÷åíèå 0 íå óñïåë. Âýòîì ñëó÷àå äðóãîé ïðîöåññ ìîæåò òàêæå óâèäåòü çíà÷åíèå 1, ïðèñâîèòü0 è âîéòè â ñåêöèþ; çàòåì óïðàâëåíèå âåðíåòñÿ ïåðâîìó ïðîöåññó, íî âåäüïðîâåðêó çíà÷åíèÿ îí óæå ïðîèçâåë, òàê ÷òî îí òàêæå ïðîèçâåäåò ïðèñâàèâàíèå íóëÿ è âîéäåò â ñåêöèþ.
 ðåçóëüòàòå îáà ïðîöåññà îêàæóòñÿ â ñåêöèèîäíîâðåìåííî, òî åñòü ïðîèçîéäåò òî, ÷åãî ìû ïûòàëñü èçáåæàòü.Ýòîò ïðèìåð èëëþñòðèðóåò ïîòðåáíîñòü â àòîìàðíîñòè íåêîòîðûõ äåéñòâèé ïðè îðãàíèçàöèè âçàèìîèñêëþ÷åíèÿ.  ñàìîì äåëå, åñëè áû öèêë whileè ïðèñâàèâàíèå s = 0 â ïðèâåäåííîì ïðèìåðå âûïîëíÿëèñü áû êàê îäíà íåäåëèìàÿ îïåðàöèÿ, òî åñòü áûëà áû òåì èëè èíûì ñïîñîáîì èñêëþ÷åíà âîçìîæíîñòü ïðåðûâàíèÿ ýòîé îïåðàöèè íà ñåðåäèíå, ïðîáëåìû áû íå áûëî.27.3.2Çàïðåò âíåøíèõ ïðåðûâàíèéËîãè÷íî ïðèõîäèò â ãîëîâó èäåÿ î çàïðåòå âíåøíèõ (àïïàðàòíûõ) ïðåðûâàíèé íà âðåìÿ âûïîëíåíèÿ êðèòè÷åñêîé ñåêöèè. Ê ñîæàëåíèþ, ýòîò âàðèàíòíåïðèåìëåì ïî öåëîìó ðÿäó ïðè÷èí.
Ðàññìîòðèì ýòè ïðè÷èíû.Âî-ïåðâûõ, çàïðåò ïðåðûâàíèé ãîäèòñÿ ëèøü äëÿ êðàòêîâðåìåííûõ êðèòè÷åñêèõ ñåêöèé: äëèòåëüíîå çàïðåùåíèå ïðåðûâàíèé íàðóøèò ðàáîòó àïïàðàòóðû (íàïðèìåð, ïåðåñòàíóò ïðèíèìàòüñÿ è ïåðåäàâàòüñÿ äàííûå ïî ñåòè).Âî-âòîðûõ, çàïðåò ïðåðûâàíèé ïðèãîäåí òîëüêî äëÿ ðàáîòû ñ äàííûìè,íàõîäÿùèìèñÿ â îïåðàòèâíîé ïàìÿòè, ïîñêîëüêó äëÿ ëþáîãî îáìåíà ñ âíåøíèìè óñòðîéñòâàìè (â òîì ÷èñëå äëÿ ÷òåíèÿ è çàïèñè ôàéëîâ) àïïàðàò ïðåðûâàíèé äîëæåí ðàáîòàòü. Çàìåòèì, ïðè ýòîì íåîáõîäèìî òåì èëè èíûì ñïîñî152áîì ãàðàíòèðîâàòü, ÷òî äàííûå äåéñòâèòåëüíî íàõîäÿòñÿ â ïàìÿòè, ò.ê, åñëèïðîöåññ çàïðåòèò ïðåðûâàíèÿ, à çàòåì îáðàòèòñÿ â îáëàñòü ïàìÿòè, â íàñòîÿùåå âðåìÿ îòêà÷àííóþ íà äèñê, îïåðàöèÿ ïîäêà÷êè ëèáî ïîïðîñòó íå áóäåòâûïîëíåíà (÷òî ïðèâåäåò ê àâàðèè), ëèáî îïåðàöèîííàÿ ñèñòåìà âñå-òàêè ðàçðåøèò ïðåðûâàíèÿ, ÷òî ìîæåò, â ñâîþ î÷åðåäü, ïðèâåñòè ê ïîëó÷åíèþ óïðàâëåíèÿ äðóãèì ïðîöåññîì è íàðóøåíèþ âçàèìíîãî èñêëþ÷åíèÿ.Â-òðåòüèõ, çàïðåò ïðåðûâàíèé îáû÷íî êàñàåòñÿ òîëüêî îäíîãî ïðîöåññîðà. ñèñòåìå ñ íåñêîëüêèìè ïðîöåññîðàìè ýòî ýôôåêòà íå äàñò.Äàëåå, â êîìáèíàöèè ñ àêòèâíûì îæèäàíèåì çàïðåò ïðåðûâàíèé (â îäíîïðîöåññîðíîé ñèñòåìå) ïðèâåäåò ê çàâèñàíèþ ñèñòåìû, âåäü ïðè çàïðåùåííûõïðåðûâàíèÿõ íè îäèí äðóãîé ïðîöåññ (â òîì ÷èñëå è âèíîâíèê áëîêèðîâêè)íå ìîæåò ïîëó÷èòü óïðàâëåíèå è ñíÿòü áëîêèðîâêó, èñ÷åçíîâåíèÿ êîòîðîé ìûàêòèâíî îæèäàåì.Íàêîíåö (è ýòî, ïîæàëóé, ñàìîå âàæíîå ñîîáðàæåíèå) äîïóñêàòü çàïðåòïðåðûâàíèé ïîëüçîâàòåëüñêèìè ïðîöåññàìè ñëèøêîì îïàñíî.
Äàæå åñëè èñêëþ÷èòü çëîé óìûñåë ñî ñòîðîíû ïîëüçîâàòåëåé (÷òî óæå ñàìî ïî ñåáå ñòðàííî äëÿ ìíîãîïîëüçîâàòåëüñêîé ñèñòåìû), îñòàåòñÿ âîçìîæíîñòü îøèáî÷íûõñèòóàöèé. Åñëè, ê ïðèìåðó, ïðîöåññ, çàïðåòèâøèé ïðåðûâàíèÿ, ñëó÷àéíî çàöèêëèòñÿ, ñèñòåìà â ðåçóëüòàòå ýòîãî ïîâèñíåò è åå ïðèäåòñÿ ïåðåçàãðóæàòü. Ïîýòîìó çàïðåò ïðåðûâàíèé ñ÷èòàåòñÿ ïðèâèëåãèðîâàííûì äåéñòâèåìè äëÿ ïîëüçîâàòåëüñêèõ ïðîöåññîâ íåäîñòóïåí.Îòìåòèì, ÷òî ÿäðî ÎÑ ïðè ýòîì ñàìî äîñòàòî÷íî ÷àñòî èñïîëüçóåò êðàòêîâðåìåííûå çàïðåòû ïðåðûâàíèé äëÿ îáåñïå÷åíèÿ àòîìàðíîñòè íåêîòîðûõîïåðàöèé; ïîýòîìó, êàê ìû óâèäèì ïîçæå, â ñîâðåìåííûõ ñèñòåìàõ îáåñïå÷åíèå âçàèìîèñêëþ÷åíèÿ âîçëàãàåòñÿ íà ÿäðî.27.3.3×åðåäîâàíèåÑëåäóþùèé ñïîñîá âçàèìîèñêëþ÷åíèÿ çàêëþ÷àåòñÿ â òîì, ÷òî ïðîöåññûïî î÷åðåäè ïåðåäàþò äðóã äðóãó ïðàâî ðàáîòû ñ ðàçäåëÿåìûìè äàííûìè íàìàíåð ýñòàôåòíîé ïàëî÷êè.for(;;) {while(turn != 0) {}section();turn = 1;noncritical_job();}for(;;) {while(turn != 1) {}section();turn = 0;noncritical_job();}Ðèñ.
25: Âçàèìîèñêëþ÷åíèå íà îñíîâå ÷åðåäîâàíèÿ153Íà ðèñ.25 ïîêàçàíû äâà ïðîöåññà, îñóùåñòâëÿþùèå äîñòóï ê ðàçäåëÿåìûì äàííûì (ôóíêöèÿ section()) â ñîîòâåòñòâèè ñ ìàðêåðîì ÷åðåäîâàíèÿ,õðàíÿùèìñÿ â ïåðåìåííîé turn. Çíà÷åíèå 0 îçíà÷àåò, ÷òî ïðàâî íà äîñòóï êðàçäåëÿåìûì äàííûì èìååò ïåðâûé ïðîöåññ, çíà÷åíèå 1 ñîîòâåòñòâóåò ïðàâóâòîðîãî ïðîöåññà. Çàâåðøèâ ðàáîòó â êðèòè÷åñêîé ñåêöèè, ïðîöåññ ïåðåäàåòõîä äðóãîìó ïðîöåññó è ïðèñòóïàåò ê âûïîëíåíèþ äåéñòâèé, íå òðåáóþùèõäîñòóïà ê ðàçäåëÿåìûì äàííûì (ôóíêöèÿ noncritical_job()).Òàêîé ñïîñîá äåéñòâèòåëüíî íå äàåò ïðîöåññàì îêàçàòüñÿ â êðèòè÷åñêîéñåêöèè îäíîâðåìåííî, íî èìååò, ê ñîæàëåíèþ, äðóãîé íåäîñòàòîê.
Åñëè îäèíèç ïðîöåññîâ, ïåðåäàâ õîä äðóãîìó, áûñòðî âûïîëíèò âñå íåêðèòè÷åñêèå äåéñòâèÿ è ñíîâà ïîïûòàåòñÿ âîéòè â êðèòè÷åñêóþ ñåêöèþ, ìîæåò ïîëó÷èòüñÿòàê, ÷òî âòîðîé ïðîöåññ â ýòî âðåìÿ äî ñâîåé êðèòè÷åñêîé ñåêöèè òàê è íåäîøåë (è, ñîîòâåòñòâåííî, íå ïåðåäàë õîä ïåðâîìó ïðîöåññó).  ðåçóëüòàòåâòîðîé ïðîöåññ, íå íóæäàÿñü â äîñòóïå ê ðàçäåëÿåìûì äàííûì, òåì íå ìåíååáóäåò ìåøàòü îñóùåñòâëÿòü òàêîé äîñòóï ïåðâîìó ïðîöåññó, òî åñòü íàðóøèòñÿ âòîðîå èç ñôîðìóëèðîâàííûõ âûøå óñëîâèé.27.3.4Àëãîðèòì ÏåòåðñîíàÎò íåäîñòàòêîâ ïðåäûäóùèõ ïîäõîäîâ èçáàâëåí àëãîðèòì Ïåòåðñîíà.Ìû ðàññìîòðèì åãî äëÿ ñëó÷àÿ äâóõ ïðîöåññîâ4 .Äëÿ îñóùåñòâëåíèÿ âçàèìîèñêëþ÷åíèÿ íàì â ýòîò ðàç ïîòðåáóþòñÿñîçäàòü â ðàçäåëÿåìîé ïàìÿòè ìàññèâ èç äâóõ ëîãè÷åñêèõ ïåðåìåííûõinterested[2], ïîêàçûâàþùèõ, íóæäàåòñÿ ëè ñîîòâåòñòâóþùèé (íóëåâîéèëè ïåðâûé) ïðîöåññ â âûïîëíåíèè êðèòè÷åñêîé ñåêöèè; âî âðåìÿ âûïîëíåíèÿ ñåêöèè ñîîòâåòñòâóþùåå ëîãè÷åñêîå çíà÷åíèå òàêæå áóäåò èñòèííûì.Êðîìå òîãî, ââåäåì (òàêæå â ðàçäåëÿåìîé ïàìÿòè) ïåðåìåííóþ who_waits,êîòîðàÿ áóäåò ïîêàçûâàòü, êîòîðûé èç ïðîöåññîâ â ñëó÷àå ñòîëêíîâåíèÿ äîëæåí ïîäîæäàòü çàâåðøåíèÿ êðèòè÷åñêîé ñåêöèè âòîðîãî.Ïðèíöèï àëãîðèòìà â òîì, ÷òî, ïîêàçàâ ñâîþ çàèíòåðåñîâàííîñòü âî âõîäåâ êðèòè÷åñêóþ ñåêöèþ (òî åñòü ïðèñâîèâ ëîãè÷åñêóþ èñòèíó ñîîòâåòñòâóþùåé ÿ÷åéêå ìàññèâà interested), ïðîöåññ çàòåì çàÿâëÿåò î ñâîåé ãîòîâíîñòèïîäîæäàòü, åñëè ýòî íåîáõîäèìî, çàíåñÿ â ïåðåìåííóþ who_waits ñâîé íîìåð.Çàòåì îí áóäåò æäàòü äî òåõ ïîð, ïîêà ëèáî íå èçìåíèòñÿ íîìåð who_waits(ýòî îçíà÷àåò, ÷òî âòîðîé ïðîöåññ ïðîÿâèë ãîòîâíîñòü ïîäîæäàòü), ëèáî âòîðîé ïðîöåññ íå îêàæåòñÿ íåçàèíòåðåñîâàí âî âõîæäåíèè â ñåêöèþ.Íà ðèñ.
26 àëãîðèòì Ïåòåðñîíà ïîêàçàí â âèäå äâóõ ïðîöåäóð:enter_section()(âõîäâêðèòè÷åñêóþñåêöèþ)è4 Ñóùåñòâóþòîòíîñèòñÿàíàëîãè÷íûå àëãîðèòìû è äëÿ ïðîèçâîëüíîãî ÷èñëà ïðîöåññîâ; íàïðèìåð, ê òàêîâûì(bakery algorithm)àëãîðèòì áóëî÷íîé154void enter_section() {interested[0] = TRUE;who_waits = 0;while(who_waits==0 &&interested[1]) {}}void leave_section() {interested[0] = FALSE;}void enter_section() {interested[1] = TRUE;who_waits = 1;while(who_waits==1 &&interested[0]) {}}void leave_section() {interested[1] = FALSE;}Ðèñ. 26: Àëãîðèòì Ïåòåðñîíàleave_section() (âûõîä èç êðèòè÷åñêîé ñåêöèè)Åäèíñòâåííûì íåäîñòàòêîì àëãîðèòìà Ïåòåðñîíà è áîëåå ñëîæíûõ àëãîðèòìîâ, ïîñòðîåííûõ íà ýòîé èäåå, òàêèõ êàê àëãîðèòì áóëî÷íîé (àíãë.bakery algorithm), ÿâëÿåòñÿ àêòèâíîå îæèäàíèå.
Ê ñîæàëåíèþ, ýòîãî âïîëíåäîñòàòî÷íî, ÷òîáû ñ÷èòàòü ýòè ðåøåíèÿ íåïðèåìëåìûìè.27.427.4.1Ìüþòåêñû è ñåìàôîðûÏîääåðæêà âçàèìîèñêëþ÷åíèÿ íà óðîâíå ÎÑÏîäõîäû ê ïîñòðîåíèþ âçàèìíîãî èñêëþ÷åíèÿ, ïåðå÷èñëåííûå â ïðåäûäóùåì ïàðàãðàôå, õàðàêòåðíû íàëè÷èåì àêòèâíîãî îæèäàíèÿ − òàêîãî ñîñòîÿíèÿ ïðîöåññà, ïðè êîòîðîì îí â îæèäàíèè ìîìåíòà, êîãäà ìîæíî áóäåò âîéòèâ êðèòè÷åñêóþ ñåêöèþ, âûíóæäåí ïîñòîÿííî îïðàøèâàòü îïðåäåëåííûå ïåðåìåííûå â ðàçäåëÿåìîé ïàìÿòè, ïðè ýòîì íå âûïîëíÿÿ íèêàêèõ ïîëåçíûõäåéñòâèé, íî çàíèìàÿ âðåìÿ öåíòðàëüíîãî ïðîöåññîðà.×òîáû ïðîöåññ, îæèäàþùèé âõîäà â êðèòè÷åñêóþ ñåêöèþ, íå ðàñõîäîâàëïîïóñòó ïðîöåññîðíîå âðåìÿ, ñëåäóåò, î÷åâèäíî, çàáëîêèðîâàòü åãî äî òåõ ïîð,ïîêà íóæíûå åìó ðàçäåëÿåìûå ðåñóðñû íå îêàæóòñÿ ñâîáîäíû, òî åñòü íåâûäåëÿòü åìó êâàíòîâ âðåìåíè äî îñâîáîæäåíèÿ ðåñóðñîâ.
Ñ äðóãîé ñòîðîíû,â ìîìåíò îñâîáîæäåíèÿ ðåñóðñîâ ïðîöåññ íåîáõîäèìî ðàçáóäèòü, òî åñòüïåðåâåñòè èç ñîñòîÿíèÿ áëîêèðîâêè â ñîñòîÿíèå ãîòîâíîñòè; æåëàòåëüíî ïðèýòîì ñíîâà ïîìåòèòü ðàçäåëÿåìûå ðåñóðñû êàê çàíÿòûå, ÷òîáû ïðîöåññó íåïðèøëîñü ñíîâà âûäåðæèâàòü êîíêóðåíòíûé ïîåäèíîê ñ äðóãèìè ïðîöåññàìèçà ñîîòâåòñòâóþùèé ðåñóðñ.Áëîêèðîâàòü ïðîöåññ ìîæåò òîëüêî îïåðàöèîííàÿ ñèñòåìà. Åñëè áû ïðîöåññó áûëî òî÷íî èçâåñòíî, ÷åðåç êàêîé ïðîìåæóòîê âðåìåíè íóæíûé åìóðåñóðñ îêàæåòñÿ îñâîáîæäåí, îí ìîã áû âûïîëíèòü ñèñòåìíûé âûçîâ, ïîäîá155íûé ôóíêöèè sleep(), ÷òîáû îòêàçàòüñÿ îò âûïîëíåíèÿ íà çàäàííûé ïåðèîä.Îäíàêî ìîìåíò îñâîáîæäåíèÿ íóæíîãî ðåñóðñà ïðîöåññó íå èçâåñòåí, ò.ê. çàâèñèò îò ôóíêöèîíèðîâàíèÿ äðóãèõ ïðîöåññîâ.Ïîëó÷àåòñÿ, ÷òî óïðàâëåíèå ïîìåòêàìè çàíÿòîñòè/îñâîáîæäåíèÿ ðåñóðñîâ ñëåäóåò âîçëîæèòü íà îïåðàöèîííóþ ñèñòåìó, ñîçäàâ åùå îäèí ñïîñîáâçàèìîäåéñòâèÿ ïðîöåññîâ.Ñëåäóåò îòìåòèòü, ÷òî òàêîé ïîäõîä, êðîìå èçáàâëåíèÿ îò àêòèâíîãî îæèäàíèÿ, èìååò è äðóãîå âàæíîå ïðåèìóùåñòâî.
Îïåðàöèîííàÿ ñèñòåìà, â îòëè÷èå îò ïðîöåññà, èìååò âîçìîæíîñòü ïðè íåîáõîäèìîñòè çàïðåùàòü ïðåðûâàíèÿ íà âðåìÿ èñïîëíåíèÿ îïðåäåëåííûõ äåéñòâèé âíóòðè ÿäðà, îáåñïå÷èâàÿ,òàêèì îáðàçîì, àòîìàðíîñòü ñêîëü óãîäíî ñëîæíûõ îïåðàöèé5 . Ïðè ýòîì èñ÷åçàåò íåîáõîäèìîñòü â ñëîæíûõ óõèùðåíèÿõ, ïîäîáíûõ àëãîðèòìó Ïåòåðñîíà.27.4.2ÌüþòåêñûÏîä ìüþòåêñîì 6 â îáùåì ñëó÷àå ïîíèìàåòñÿ îáúåêò, èìåþùèé äâà ñîñòîÿíèÿ (îòêðûò/çàïåðò) è, ñîîòâåòñòâåííî, äâå îïåðàöèè: lock() (çàïåðåòü) èunlock() (îòêðûòü).Îïåðàöèÿ unlock() ïðîõîäèò óñïåøíî (è íåìåäëåííî âîçâðàùàåò óïðàâëåíèå) â ëþáîì ñëó÷àå, ïåðåâîäÿ îáúåêò â ñîñòîÿíèå îòêðûò.Äëÿ îïåðàöèè lock() ìîæåò áûòü äâà âàðèàíòà:1.