Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные среды АСОИУ / L14
.TXT я_я23.9. Њ®Ёв®а Є Є б।бвў® ॠ«Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«о票п
‹®ЈЁЄ ЇаЁЄ« ¤ле Їа®жҐбб®ў, в Є¦Ґ ўЁ¤л аҐбгаб®ў Ё Їа ўЁ«
¤®бвгЇ Є Ё¬ ЎҐ§Ја Ёзл.
Џ®н⮬㠯®пвЁҐ ᥬ д®а ¬®¦Ґв Ўлвм ва бд®а¬Ёа®ў ® ў Ў®«ҐҐ
®Ў®ЎйҐл© ®ЎкҐЄв.
ќв®в ®Ў®ЎйҐл© ®ЎкҐЄв §лў Ґвбп я1¬®Ёв®а®¬.я0 Џ®б«Ґ в®Ј® Є Є
¬л а бᬮваЁ¬ Ї®пвЁҐ "¬®Ёв®а", ¬л гўЁ¤Ё¬, з⮠ᥬ д®а пў«пҐвбп
з бвл¬ б«гз Ґ¬ ¬®Ёв®а .
Њ®Ёв®а Ї® ®ЇаҐ¤Ґ«ҐЁо ЇаҐ¤бв ў«пҐв б®Ў®© б®ў®ЄгЇ®бвм
¤ ле Ё Їа®жҐ¤га а Ў®вл б нвЁ¬Ё ¤ л¬Ё. ЏаЁзҐ¬, ў Є зҐб⢥
¤ ле ¬®Ёв®а ¬®Јгв ўлбвгЇ вм Ё ®зҐаҐ¤Ё Їа®жҐбб®ў.
Џа®жҐ¤гал ¬®Ёв®а , Є®в®алҐ ¤®бвгЇл Ї®«м§®ў вҐ«п¬ ¬®Ёв®а
- Їа®жҐбб ¬, §лў овбп ўҐиЁ¬Ё.
Џа®жҐббл Ґ Ё¬Ґов ҐЇ®б।б⢥®Ј® ¤®бвгЇ Є ¤ л¬,
в®«мЄ® зҐаҐ§ ўҐиЁҐ Їа®жҐ¤гал ¬®Ёв®а .
Џа®жҐ¤гал ¬®Ёв®а ᮤҐа¦ в ®ЇҐа жЁЁ, Ї®§ў®«пойЁҐ ®б®ўҐ
«Ё§ ¤ ле ¬®Ёв®а , бв ўЁвм Їа®жҐббл ў ®зҐаҐ¤Ё Ё
ЄвЁўЁ§Ёа®ў вм Ёе.
Ђ«Ј®аЁв¬л «Ё§ ¤ ле § ўЁбпв ®в ᮤҐа¦ ⥫쮩 бв®а®л
§ ¤ зЁ.
Џа®жҐ¤гал ¬®Ёв®а ўлЇ®«повбп ў ०Ё¬Ґ ў§ Ё¬®Ј®
ЁбЄ«о票п. ЏаЁзҐ¬, ў®Їа®б ॠ«Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«о票п - нв®
ўв®аЁзл© ў®Їа®б.
‚®Їа®б ॠ«Ё§ жЁЁ б ¬®Ј® ¬®Ёв®а ⮦Ґ пў«пҐвбп ўв®аЁзл¬
ў®Їа®б®¬.
‘ў®©бвў ¬®Ёв®а , ЇҐаҐзЁб«ҐлҐ ўлиҐ, ¬®Јгв Ўлвм
ॠ«Ё§®ў л Є Є ў ¬®¤г«Ґ, в Є Ё ў ®ЎкҐЄвҐ.
Ў«® ¬®¤г«п, Є®в®ал© ¬®¦Ґв а бб¬ ваЁў вмбп Є Є ¬®Ёв®а,
ЇаҐ¤бв ў«Ґ Ё¦Ґ.
Unit Monitor;
Interface
Procedure M1; {в®зЄЁ ўе®¤ ў ¬®Ёв®а}
Procedure M2;
Implementation
Type
...
Const
... {¤ лҐ, Ґ ¤®бвгЇлҐ Ї®«м§®ў ⥫о}
Var
...
Procedure DisableInterrupt; {ўгв२Ґ Їа®жҐ¤гал ¬®Ёв®а }
Begin
asm cli end;
End;
Procedure EnableInterrupt;
Begin
asm sti end;
End;
{ўгваҐЁе Їа®жҐ¤га ¬®¦Ґв Ўлвм бЄ®«мЄ® гЈ®¤®}
Procedure M1; {Їа®жҐ¤га , бўп§ п б ўе®¤®¬ ў ЄаЁвЁзҐбЄЁ©}
Begin {гз бв®Є}
DisableInterrupt;
...
EnableInterrupt;
End;
Procedure M2; {Їа®жҐ¤га , бўп§ п б ўл室®¬ Ё§ ЄаЁвЁзҐбЄ®Ј®}
Begin {гз бвЄ }
DisableInterrupt;
...
EnableInterrupt;
End;
Begin
{€ЁжЁ «Ё§ жЁп ¤ ле ¬®Ёв®а }
End.
€бЇ®«м§®ў ЁҐ ¬®Ёв®а ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Program Example;
Uses Monitor;
Procedure P1;
Begin
While True Do Begin
...
M1;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
M2;
...
End;
End;
Procedure P2;
Begin
While True Do Begin
...
M1;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
M2;
...
End;
End;
Begin
{€ЁжЁ «Ё§ жЁп п¤а }
End.
Џа®жҐ¤га Њ1 ¬®Ёв®а , «Ё§Ёагп ¤ лҐ, ўлЇ®«пҐв
б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- Їа®ўҐапҐв гб«®ўЁп ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є; ЇаЁ
ўлЇ®«ҐЁЁ нвЁе гб«®ўЁ© Їа®жҐбб, ўл§ў ўиЁ© Їа®жҐ¤гаг Њ1,
Їа®¤®«¦ Ґв ўлЇ®«пвмбп, ў®©¤п ў ЄаЁвЁзҐбЄЁ© гз бв®Є; ЇаЁ
ҐўлЇ®«ҐЁЁ - Їа®жҐбб Ў«®ЄЁагҐвбп ў ®зҐаҐ¤Ё ¬®Ёв®а ;
- гбв ў«Ёў Ґв Ґ®Ўе®¤Ё¬лҐ § зҐЁп ¤ ле ¬®Ёв®а ЇаЁ
Ў«®ЄЁа®ў ЁЁ Їа®жҐбб Ё ЇаЁ Їа®¤®«¦ҐЁЁ ўлЇ®«ҐЁп ў ЄаЁвЁзҐбЄ®¬
гз бвЄҐ.
Џа®жҐ¤га Њ2 ¬®Ёв®а ўлЇ®«пҐв б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- гбв ў«Ёў Ґв Ґ®Ўе®¤Ё¬лҐ § зҐЁп ¤ ле ¬®Ёв®а ЇаЁ
ўл室Ґ Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ ;
- Їа®ўҐапҐв гб«®ўЁп ў®§¬®¦®© ЄвЁўЁ§ жЁЁ ¦¤гйЁе Їа®жҐбб®ў Ё
ЄвЁўЁ§ агҐв Ёе ЇаЁ ўлЇ®«ҐЁЁ нвЁе гб«®ўЁ©.
Љ®«ЁзҐбвў® а §«Ёз ойЁебп Їа®жҐ¤га ўе®¤ ў ЄаЁвЁзҐбЄЁ©
гз бв®Є Ё ¬Ґв®¤®ў ўл室 Ё§ ҐЈ® ®ЇаҐ¤Ґ«пҐвбп Є®«ЁзҐбвў®¬
а §®ўЁ¤®б⥩ Їа®жҐбб®ў ў Є ¦¤®© ЇаЁЄ« ¤®© § ¤ зҐ.
Љ Є ўЁ¤® Ё§ ЇаЁўҐ¤Ґ®Ј® ®ЇЁб Ёп, ᥬ д®ал ¬®¦®
а бб¬ ваЁў вм Є Є ¬®Ёв®а б Є®ЄаҐвл¬ «Ј®аЁв¬®¬
дгЄжЁ®Ёа®ў Ёп.
ђҐ «мл¬ ЇаЁ¬Ґа®¬ ¬®Ёв®а б«г¦ в ЎЁЎ«Ё®вҐзлҐ ¬®¤г«Ё
Њ®¤г«л-2, Є®в®ал¬ ЇаЁбў®Ґ ЇаЁ®аЁвҐв.
‚ Њ®¤г«Ґ-2 бгйҐбвўгов ¤ў ўЁ¤ ¬®¤г«Ґ© - Їа®Ја ¬¬лҐ Ё
ЎЁЎ«Ё®вҐзлҐ, «®ЈЁ Program Ё Unit ў Џ бЄ «Ґ.
‘вагЄвга Їа®Ја ¬¬л Њ®¤г«Ґ-2 ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬.
MODULE Name;
IMPORT LIB_MODULE;
...
BEGIN
...
END Name.
ЃЁЎ«Ё®вҐзл© ¬®¤г«м Ё¬ҐҐв б«Ґ¤го饥 ®ЇЁб ЁҐ.
DEFINITION MODULE LIB_MODULE; {¬®¤г«м ®ЇаҐ¤Ґ«ҐЁ©}
Procedure M1; { «®Ј з бвЁ INTERFACE }
Procedure M2;
END LIB_MODULE.
IMPLEMENTATION MODULE LIB_MODULE; {¬®¤г«м ॠ«Ё§ жЁЁ}
{ॠ«Ё§ жЁп ўбҐе Їа®жҐ¤га ¬®¤г«п} { «®Ј з бвЁ IMPLEMENTATION}
END LIB_MODULE.
…бвм Ё ¤агЈЁҐ в®Є®бвЁ ¬®¤г«м®Ј® ЇаЁжЁЇ Ї®бв஥Ёп
Їа®Ја ¬¬ Њ®¤г«Ґ-2, ў з бв®бвЁ - «®Є «млҐ ¬®¤г«Ё, ®ЇЁб лҐ
ўгваЁ ¤агЈЁе ¬®¤г«Ґ©, ® ®Ё Ґ Ё¬Ґов ЇаאַЈ® ®в®иҐЁп Є
а бб¬ ваЁў Ґ¬л¬ ў®Їа®б ¬.
‚ ¦®, зв® б ЎЁЎ«Ё®вҐзл¬ ¬®¤г«Ґ¬ ¬®¦® бўп§ вм Џђ€Ћђ€’…’.
ќв® ¤Ґ« Ґвбп б«Ґ¤гойЁ¬ ®Ўа §®¬.
IMPLEMENTATION MODULE LIB_MODULE[Pr];
‡ Ё¬ҐҐ¬ ¬®¤г«п ў ¬®¤г«Ґ ॠ«Ё§ жЁЁ ў Єў ¤а вле бЄ®ЎЄ е
¬®¦Ґв бв®пвм зЁб«®. ќв® зЁб«® ®ЇаҐ¤Ґ«пҐв ЇаЁ®аЁвҐв ¬®¤г«п.
€вҐаЇаҐв жЁп ЇаЁ®аЁвҐв § ўЁбЁв ®в бЁб⥬л.
Џ® Їа ўЁ« ¬ Њ®¤г«л-2, Ґб«Ё ¬®¤г«м Ё¬ҐҐв ЇаЁ®аЁвҐв, в® ¬®¤г«м
пў«пҐвбп ¬®Ёв®а®¬ Ё ҐЈ® Їа®жҐ¤гал ўлЇ®«повбп ў ०Ё¬Ґ ў§ Ё¬®Ј®
ЁбЄ«о票п, в.Ґ. ®¤®ўаҐ¬Ґ® ¬®¦Ґв ўлЇ®«пвмбп в®«мЄ® ®¤
Їа®жҐ¤га ¬®Ёв®а .
ќв® ¤®бвЁЈ Ґвбп ўЄ«о票Ґ¬ ЁбвагЄжЁ© § ЇаҐв Ё а §аҐиҐЁп
ЇаҐалў Ё© ўе®¤Ґ Ё ўл室Ґ ўҐиЁе Їа®жҐ¤га ¬®Ёв®а б ¬Ё¬
Є®¬ЇЁ«пв®а®¬. ќв® Ў®«м讥 ¤®бв®Ёбвў® бЁбвҐ¬л Њ®¤г« -2, зв®
Ї®«м§®ў вҐ«м Ґ ¬ ЁЇг«ЁагҐв Ё§Є®га®ўҐўл¬Ё ЁбвагЄжЁп¬Ё,
ЁбЇ®«м§гҐв Ї®пвЁҐ ЇаЁ®аЁвҐв ¤«п Ї®бв஥Ёп ¬®Ёв®а .
‚ бЁб⥬Ґ Њ®¤г« -2 дЁа¬л JPI ЇаЁ®аЁвҐв ¬®¤г«п ва ЄвгҐвбп
Є®¬ЇЁ«пв®а®¬ Є Є ¬ бЄ ЇаҐалў Ё©. ’.Ґ., Ґб«Ё ЇаЁ®аЁвҐв 1, в®
¬ бЄЁагҐвбп ЇҐаўл© ўе®¤ Є®ва®««Ґа ЇаҐалў Ё© - ўе®¤ ®в в ©¬Ґа ,
Ґб«Ё ЇаЁ®аЁвҐв 2, в® ¬ бЄЁаговбп ЇаҐалў Ёп ®в Є« ўЁ вгал, Ґб«Ё
ЇаЁ®аЁвҐв 3, в® в.Є. ў ¤ў®Ёз®¬ ўЁ¤Ґ нв® зЁб«® 11, в® ¬ бЄЁаговбп
Є Є ЇаҐалў Ёп ®в в ©¬Ґа , в Є Ё ®в Є« ўЁ вгал. ’.Ґ. ЁбЇ®«м§гҐвбп
Ї® ў®§¬®¦®бвЁ Ў®«ҐҐ в®ЄЁ© ў аЁ в, 祬 Їа®бв® § ЇаҐв
ЇаҐалў Ё©.
‘гйҐбвўгҐв Ў®«м讥 Є®«ЁзҐбвў® ЇаЁЄ« ¤ле § ¤ з, Є®в®алҐ
¬®Јгв Ўлвм аҐиҐл б Ї®¬®ймо ¬®Ёв®а®ў. ђҐиҐЁҐ ҐЄ®в®а®Ј® Ў®а
в ЄЁе § ¤ з пў«пҐвбп ЇаҐ¤¬Ґв®¬ « Ў®а в®але а Ў®в Ї® ¤ЁбжЁЇ«ЁҐ
"‘Ёб⥬л ॠ«м®Ј® ўаҐ¬ҐЁ".
“Є § лҐ § ¤ зЁ ®в®бпвбп Є § ¤ з ¬ ¤ўге вЁЇ®ў:
- § ¤ зЁ, Є®в®алҐ Ї® бў®Ґ© дЁ§ЁзҐбЄ®© ЇаЁа®¤Ґ ®в®бпвбп Є
Їа®Ја ¬¬Ёа®ў Ёо Ї а ««Ґ«мле Їа®жҐбб®ў, з⮠ᮮ⢥вбвўгҐв
ᮤҐа¦ Ёо ¤ ®© ¤ЁбжЁЇ«Ёл;
- § ¤ зЁ, Є®в®алҐ ¬®¤Ґ«Ёагов Ї а ««Ґ«мл¬Ё ўлзЁб«ЁвҐ«мл¬Ё
Їа®жҐбб ¬Ё ҐЄ®в®алҐ аҐ «млҐ бЁвг жЁЁЁ, з⮠ᮮ⢥вбвўгҐв
§ў Ёо ¤ЁбжЁЇ«Ёл "‘Ёб⥬л ॠ«м®Ј® ўаҐ¬ҐЁ.
Љ ЇҐаў®¬г Є« ббг § ¤ з ®в®бпвбп:
1) § ¤ з § зҐЁп ®¤®а®¤ле аҐбгаб®ў;
2) § ¤ з б Їа®жҐбб ¬Ё "зЁв ⥫ﬨ" Ё "ЇЁб ⥫ﬨ".
Љ® ўв®а®¬г Є« ббг § ¤ з ®в®бпвбп:
1) ¬®¤Ґ«м ¦Ґ«Ґ§®¤®а®¦®Ј® ЇҐаҐЈ® ;
2) ¬®¤Ґ«м ¤®а®¦®Ј® ЇҐаҐЄаҐбвЄ ;
3) ¬®¤Ґ«м ®ЎҐ¤ ойЁе дЁ«®б®д®ў;
4) ¬®¤Ґ«м Є«ЁҐв-бҐаўҐа (¬®¦Ґв Ўлвм ®вҐбҐ Ё Є ЇҐаў®¬г
Є« ббг § ¤ з);
5) ¬®¤Ґ«м дгЄжЁ®Ёа®ў Ёп «Ёдв ;
6) ¬®¤Ґ«м Ї аЁЄ¬ еҐабЄ®©.
‡¤Ґбм ¬л а бᬮваЁ¬ § ¤ зЁ ЇҐаў®Ј® Є« бб , Ё««обваЁагойЁҐ
Ў®«ҐҐ б«®¦лҐ гб«®ўЁп Ў«®ЄЁа®ўЄЁ Ё ЄвЁўЁ§ жЁЁ Їа®жҐбб®ў, 祬 ў
ᥬ д®а е.
–Ґ«м а бᬮв२п - Ї®Є § вм, Є Є бв ўпвбп Ї®¤®ЎлҐ § ¤ зЁ,
Ё Є Є®ўл Ї®¤е®¤л Є Ёе аҐиҐЁо.
я2‡ ¤ з § зҐЁп ®¤®а®¤ле аҐбгаб®ў
‡ ¤ з § зҐЁп ®¤®а®¤ле аҐбгаб®ў д®а¬г«ЁагҐвбп
б«Ґ¤гойЁ¬ ®Ўа §®¬.
€¬ҐҐвбп N Ґ¤ЁЁж аҐбгаб Ё Њ Їа®жҐбб®ў. Љ ¦¤л© Ё§ Їа®жҐбб®ў
¬®¦Ґв § Їа®бЁвм «оЎ®Ґ Є®«ЁзҐбвў® R аҐбгаб ®в 1 ¤® N Ґ¤ЁЁж. …б«Ё
㦮Ґ Є®«ЁзҐбвў® R аҐбгаб Ё¬ҐҐвбп, в® ®® ЇаҐ¤®бв ў«пҐвбп
Їа®жҐббг, Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў 㬥ми Ґвбп ўҐ«ЁзЁг
R.
…б«Ё вॡ㥬®Ј® Є®«ЁзҐбвў бў®Ў®¤ле аҐбгаб®ў Ґв ў «ЁзЁҐ,
в® Їа®жҐбб Ў«®ЄЁагҐвбп ¤® Ёе Ї®пў«ҐЁп.
Ћбў®Ў®¦¤ п аҐбгабл, Їа®жҐбб ў®§ўа й Ґв Ёе ў зЁб«® бў®Ў®¤ле
аҐбгаб®ў Ё ЄвЁўЁ§ЁагҐв Їа®жҐббл, Є®в®алҐ бв®пв ў ®зҐаҐ¤Ё Ё
Є®в®ал¬ еў в Ґв бў®Ў®¤ле аҐбгаб®ў.
‘зЁв Ґвбп, зв® ўбҐ Їа®жҐббл а ў®Їа ўл.
Џ®б¬®ваЁ¬, Є Є ¬®¦Ґв ўлЈ«п¤Ґвм ¬®Ёв®а ў н⮬ б«гз Ґ. ЋЇЁиҐ¬
ҐЈ® ў Џ бЄ «Ґ-Ї®¤®Ў®© ®ЎкҐЄв®-®аЁҐвЁа®ў ®© бвагЄвгаҐ.
Type
PMonitor = ^TMonitor;
TMonitor = Object
N : Integer; {Є®«ЁзҐбвў® Ґ¤ЁЁж аҐбгаб®ў}
Nf : Integer; {⥪г饥 Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў}
List : PList; {®зҐаҐ¤м, ў Є®в®а®© Їа®жҐббл ¦¤гв аҐбгабл}
Constructor Init(AN : Integer);
Destructor Done;
Procedure Request(R : Integer);
Procedure Release;
End {TMonitor};
Ћв¬ҐвЁ¬, зв® ¤«п аҐиҐЁп ¤ ®© § ¤ зЁ ў ¤ҐбЄаЁЇв®аҐ
Їа®жҐбб б«Ґ¤гҐв ўл¤Ґ«Ёвм Ї®«Ґ, ў Є®в®а®¬ Ўг¤Ґв еа Ёвмбп
Є®«ЁзҐбвў® § Їа иЁў Ґ¬ле (Є®Ј¤ Їа®жҐбб ¦¤Ґв) Ё ЁбЇ®«м§гҐ¬ле
(Є®Ј¤ Їа®жҐбб Ї®«гзЁ« Ё ўлЇ®«пҐвбп) аҐбгаб®ў.
€бЇ®«м§®ў ЁҐ ¬®Ёв®а ўҐиҐ ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Var
M : PMonitor;
Begin
M := New(PMonitor, Init(10));
...
Dispose(M, Done);
End.
Procedure Proc1;
Begin
While True Do Begin
...
M^.Request(б«гз ©®Ґ зЁб«® ®в 1 ¤® N);
...
M^.Release;
...
End {While};
End {Proc1};
ђ бЄа®Ґ¬ ᮤҐа¦ ЁҐ ¬Ґв®¤®ў ¬®Ёв®а .
Constructor TMonitor.Init(AN : Integer);
Begin
N := AN;
Nf := N;
List := New(PList, Init);
End {TMonitor.Init};
Destructor TMonitor.Done;
Begin
Dispose(List, Done)
End {TMonitor.Done};
Procedure TMonitor.Request(R : Integer);
Begin
‡ ЇаҐв_ЇаҐалў Ё©;
‡ ЇЁб вм ў ¤ҐбЄаЁЇв®а § 票Ґ R;
If R > Nf Then Begin
List^.Insert(’ҐЄгйЁ©_Їа®жҐбб);
Џ…ђ…ЌЂ‡ЌЂ—€’њ_ЏђЋ–…‘‘Ћђ;
End {If};
Nf := Nf - R;
ђ §аҐиҐЁҐ_ЇаҐалў Ё©;
End {TMonitor.Request};
“б«®ўЁҐ ЇаҐ¤®бв ў«ҐЁп аҐбгаб®ў Їа®жҐббг ¬л § ЇЁб «Ё
б«Ґ¤гойЁ¬ ®Ўа §®¬:
Ґб«Ё Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў Ў®«миҐ Ё«Ё а ў®
Є®«ЁзҐбвўг § Їа иЁў Ґ¬ле аҐбгаб®ў, в® Їа®жҐбб § еў влў Ґв
вॡ㥬®Ґ Є®«ЁзҐбвў® аҐбгаб®ў Ё Їа®¤®«¦ Ґв ўлЇ®«пвмбп;
Ґб«Ё Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў ¬ҐмиҐ, 祬 Є®«ЁзҐбвў®
§ Їа иЁў Ґ¬ле аҐбгаб®ў, Їа®жҐбб Ў«®ЄЁагҐвбп ў ®зҐаҐ¤Ё ¬®Ёв®а .
‚தҐ Ўл ўбҐ «®ЈЁз®, ® ¬®¦Ґв Ё¬Ґвм ¬Ґбв®, ЇаЁ¬Ґа,
б«Ґ¤гой п бЁвг жЁп.
ЏаҐ¤Ї®«®¦Ё¬, зв® Ґбвм Їа®жҐбб, бв®пйЁ© ў ®зҐаҐ¤Ё, Є®в®а®¬г
вॡгҐвбп Ў®«м讥 Є®«ЁзҐбвў® аҐбгаб®ў, бў®Ў®¤ле аҐбгаб®ў ўбҐ
ўаҐ¬п ®Є §лў Ґвбп ¬ҐмиҐ, 祬 вॡ㥬®Ґ. ЏаЁ н⮬ бў®Ў®¤лҐ
аҐбгабл ўбҐ ўаҐ¬п § Ё¬ овбп Ё ®бў®Ў®¦¤ овбп Їа®жҐбб ¬Ё, Є®в®ал¬
вॡгҐвбп ¬ «®Ґ Є®«ЁзҐбвў® аҐбгаб®ў.
ќв® ЇаЁў®¤Ёв Є ⮬г, зв® Їа®жҐбб, § Їа иЁў ойЁ© Ў®«м讥
Є®«ЁзҐбвў® аҐбгаб®ў, ¬®¦Ґв ®Є § вмбп ў б®бв®пЁЁ "ЎҐбЄ®Ґз®Ј®
®¦Ё¤ Ёп". ќв® бҐамҐ§л© Ґ¤®бв в®Є «Ј®аЁв¬ ¬®Ёв®а .
Љ Є гбва Ёвм нв®в Ґ¤®бв в®Є?
Ќ ЇаЁ¬Ґа, гб«®¦Ёвм гб«®ўЁҐ Ў«®ЄЁа®ўЄЁ Їа®жҐбб , ¤®Ў ўЁў ў
ҐЈ® б«Ґ¤го饥:
If я2R > Nf €‹€ …бвм Їа®жҐббл ў ®зҐаҐ¤Ё ¬®Ёв®а я0 Then Begin
...
End {If};
‚ н⮬ б«гз Ґ, Їа®жҐббл, вॡгойЁҐ ¬ «®Ј® Є®«ЁзҐбвў
аҐбгаб®ў, Ґ ᬮЈгв Ї®«гз вм Ёе ў ®Ўе®¤ Їа®жҐбб , вॡго饣®
Ў®«ми®Ј® Є®«ЁзҐбвў аҐбгаб®ў.
•®вп Їа®жҐббл, вॡгойЁҐ ¬ «®Ј® Є®«ЁзҐбвў аҐбгаб®ў, Ўг¤гв
ҐбвЁ ҐЇа®Ё§ў®¤ЁвҐ«млҐ Ї®вҐаЁ, в.Є. Ўг¤гв бЁвг жЁЁ, Є®Ј¤
бў®Ў®¤ле аҐбгаб®ў ¤®бв в®з®, ® ®Ё Ґ Ўг¤г⠢뤥«пвмбп, в.Є.
Ґбвм Їа®жҐббл ў ®зҐаҐ¤Ё ¬®Ёв®а .
Ђ «®ЈЁзлҐ бЁвг жЁЁ ¬®Јгв Ё¬Ґвм ¬Ґбв® ЇаЁ ®бў®Ў®¦¤ҐЁЁ
аҐбгаб®ў.
‡ ЇЁиҐ¬ ў аЁ в ¬Ґв®¤ TMonitor.Release.
Procedure TMonitor.Release;
Begin
‡ ЇаҐв_ЇаҐалў Ё©;
Nf := Nf + R;
ЏҐаҐўҐбвЁ ў ®зҐаҐ¤м Ј®в®ўле ўбҐ Їа®жҐббл, ¤«п Є®в®але б㬬
вॡ㥬ле аҐбгаб®ў ¬ҐмиҐ Ё«Ё а ў б㬬Ґ бў®Ў®¤ле
аҐбгаб®ў, Ґ § ўЁбЁ¬® ®в Ёе ¬Ґбв ў ®зҐаҐ¤Ё;
ђ §аҐиҐЁҐ_ЇаҐалў Ё©;
End {TMonitor.Release};
‚ н⮬ б«гз Ґ, Ґб«Ё ў з «Ґ ®зҐаҐ¤Ё 室Ёвбп Їа®жҐбб,
¦¤гйЁ© Ў®«ми®Ј® Є®«ЁзҐбвў аҐбгаб®ў, ® в Є¦Ґ ¬®¦Ґв Ґ
ЄвЁўЁ§Ёа®ў вмбп ЎҐбЄ®Ґз® ¤®«Ј®.
—в®Ўл гбва Ёвм гЄ § л© Ґ¤®бв в®Є, ¬®¦® Їа ўЁ«®
ЄвЁўЁ§ жЁЁ Їа®жҐбб®ў § ЇЁб вм б«Ґ¤гойЁ¬ ®Ўа §®¬:
While ®зҐаҐ¤м Ґ Їгбв п Do Begin
If ЇҐаў®¬г ў ®зҐаҐ¤Ё Їа®жҐббг еў вЁв бў®Ў®¤ле аҐбгаб®ў,
Then
ЇҐаҐўҐбвЁ нв®в Їа®жҐбб ў ®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў
Else
Break
End {While};
’.Ґ. ЄвЁўЁ§ жЁо ў «оЎ®¬ б«гз Ґ б«Ґ¤гҐв зЁ вм б ЇҐаў®Ј®
Їа®жҐбб .
„ л© ЇаЁ¬Ґа Ї®Є §лў Ґв е а ЄвҐа Їа®Ў«Ґ¬, ў®§ЁЄ ойЁе ЇаЁ
¤®бвгЇҐ Їа®жҐбб®ў Є аҐбгаб ¬, Ё бЇ®б®Ў®ў Ёе гбва ҐЁп.
‚ ¦®© Їа®Ў«Ґ¬®© пў«пҐвбп ®Ї б®бвм ®Є § вмбп ў ०Ё¬Ґ
ЎҐбЄ®Ґз®Ј® ®¦Ё¤ Ёп ҐЄ®в®ал¬Ё Їа®жҐбб ¬Ё ў ®зҐаҐ¤пе ¬®Ёв®а .
ЃҐбЄ®Ґз®Ґ ®¦Ё¤ ЁҐ гбва пҐвбп ЁбЇ®«м§®ў ЁҐ¬ Ї®¤е®¤пйЁе
«Ј®аЁв¬®ў ЄвЁўЁ§ жЁЁ, ¬®¦Ґв Ўлвм ¤ ¦Ґ Їг⥬ ®вЄ § ®в «Ґ¦ йЁе
Ї®ўҐае®бвЁ ЇаҐЁ¬гйҐбвў.
я2‡ ¤ з б Їа®жҐбб ¬Ё "зЁв ⥫ﬨ" Ё "ЇЁб ⥫ﬨ"
Ћв«ЁзЁҐ ¤ ®© § ¤ зЁ ®в ЇаҐ¤л¤г饩 б®бв®Ёв ў ⮬, зв® §¤Ґбм
Ґбвм ¤ў вЁЇ Їа®жҐбб®ў б а §л¬Ё Їа ў ¬Ё ¤®бвгЇ Є аҐбгабг.
…бвм ҐЄ®в®ал© аҐбгаб, ЇаЁ¬Ґа, д ©«.
…бвм ҐбЄ®«мЄ® Їа®жҐбб®ў-зЁв ⥫Ґ©, Є®в®алҐ ¬®Јгв в®«мЄ®
зЁв вм ᮤҐа¦Ё¬®Ґ д ©« , Ё Ґбвм ҐбЄ®«мЄ® Їа®жҐбб®ў-ЇЁб ⥫Ґ©,
Є®в®алҐ ¬®Јгв ¬®¤ЁдЁжЁа®ў вм ᮤҐа¦Ё¬®Ґ д ©« .
‚ «оЎ®© ¬®¬Ґв б д ©«®¬ ¬®¦Ґв а Ў®в вм Ё«Ё ®¤Ё ЇЁб вҐ«м Ё«Ё
«оЎ®Ґ Є®«ЁзҐбвў® зЁв ⥫Ґ©.
Џ® Є®«ЁзҐбвўг вЁЇ®ў Їа®жҐбб®ў - ¤ў , ¬®Ёв®а Ё¬ҐҐв ¤ўҐ
Їа®жҐ¤гал ¤®бвгЇ Є д ©«г Ё ¤ўҐ Їа®жҐ¤гал ®бў®Ў®¦¤ҐЁп д ©« .
Type
PMOnitor = ^TMonitor;
TMonitor = Object
Nr, {Є®«ЁзҐбвў® зЁв ⥫Ґ© Ё ЇЁб ⥫Ґ©,}
Nw : Integer; {а Ў®в ойЁе б д ©«®¬}
RList : PList;
WList : PList;
Constructor Init;
Destructor Done;
Procedure Enter_R;
Procedure Enter_W;
Procedure Exit_R;
Procedure Exit_W;
End {TMonitor};
€ЁжЁ «Ё§ жЁп ¤ ®Ј® ¬®Ёв®а «®ЈЁз ЁЁжЁ «Ё§ жЁЁ
ЇаҐ¤л¤г饣® ¬®Ёв®а .
Procedure Reader; Procedure Writer;
Begin Begin
While True Do Begin While True Do Begin
... ...
M^.Enter_R; M^.Enter_W;
... ...
M^.Exit_R; M^.Exit_W;
... ...
End {While}; End {While};
End {Reader}; End {Writer};
’ॡгҐвбп д®а¬ «Ё§®ў вм гб«®ўЁп ¤®бвгЇ Є д ©«г зЁв вҐ«п Ё
ЇЁб вҐ«п Ё Їа ўЁ« ЄвЁўЁ§ жЁЁ Їа®жҐбб®ў ЇаЁ ®бў®Ў®¦¤ҐЁЁ д ©« .
“б«®ўЁҐ ¤®бвгЇ Є д ©«г ЇЁб ⥫п:
…б«Ё д ©« § пв ЇЁб ⥫Ґ¬ Ё«Ё зЁв ⥫ﬨ, в®
Ў«®ЄЁа®ўЄ ;
„ ®Ґ гб«®ўЁҐ д®а¬ «Ё§гҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
If Nw > 0 OR Nr > 0 Then ... .
“б«®ўЁҐ ¤®бвгЇ Є д ©«г зЁв ⥫п:
…б«Ё д ©« § пв ЇЁб ⥫Ґ¬, в® {зЁв ⥫Ґ© ¬®¦Ґв Ўлвм ҐбЄ®«мЄ®}
Ў«®ЄЁа®ўЄ ;
„ ®Ґ гб«®ўЁҐ д®а¬ «Ё§гҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
If Nw > 0 Then ... .
ЏаҐ¤Ї®«®¦Ё¬, зв® зЁв ⥫Ё § еў вЁ«Ё д ©«. „®Ў «ҐЁҐ ¤агЈЁе
зЁв ⥫Ґ© ў®§¬®¦®, Ґб«Ё д ©« § еў зҐ зЁв ⥫ﬨ. Џ®н⮬г
Ї®пў«пҐвбп ®Ї б®бвм, зв® ЇЁб вҐ«м ЎҐбЄ®Ґз® ¤®«Ј® Ўг¤Ґв ¦¤ вм
¤®бвгЇ Є д ©«г, Ґб«Ё Є Ґ¬г Ўг¤г⠢ᥠўаҐ¬п ®Ўа й вмбп зЁв ⥫Ё.
ЋЈа ЁзЁвм ¤®бвгЇ зЁв ⥫Ґ© Є д ©«г ¬®¦®, гб«®¦Ёў гб«®ўЁҐ
¤®бвгЇ :
…б«Ё я2д ©« § пв ЇЁб ⥫Ґ¬ €‹€ Ґбвм ЇЁб ⥫Ё ў ®зҐаҐ¤Ё,я0 в®
Ў«®ЄЁа®ўЄ ;
‚ле®¤л Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ ¤«п зЁв вҐ«п Ё ЇЁб ⥫п
ўлЈ«п¤пв б«Ґ¤гойЁ¬ ®Ўа §®¬.
я2—Ёв ⥫м:
…б«Ё Ґв зЁв ⥫Ґ©, а Ў®в ойЁе б д ©«®¬, € Ґбвм ЇЁб вҐ«м ў
®зҐаҐ¤Ё,
в® ЄвЁўЁ§ жЁп ЇЁб ⥫п;
я2ЏЁб ⥫м:
Љ Є Ўлвм ЇЁб ⥫о, Ґб«Ё Ґбвм Ё ЇЁб ⥫Ё Ё зЁв ⥫Ё ў
®зҐаҐ¤пе. €вгЁвЁў® Є ¦Ґвбп, зв® г ЇЁб вҐ«п ¤®«¦Ґ Ўлвм
ЇаЁ®аЁвҐв ЇҐаҐ¤ зЁв ⥫ﬨ. Џ®н⮬㠯Ёб вҐ«м ¤®«¦Ґ
ЄвЁўЁ§Ёа®ў вм ЇЁб вҐ«п ¦Ґ. Ћ¤ Є® ў н⮬ б«гз Ґ Ї®пў«пҐвбп
®Ї б®бвм ЎҐбЄ®Ґз®Ј® ®¦Ё¤ Ёп зЁв ⥫Ґ©. Џ®н⮬㠫гзиҐ, Ґб«Ё
ЇЁб вҐ«м Ўг¤Ґв ЄвЁўЁ§Ёа®ў вм зЁв ⥫Ґ©, Ґб«Ё Ёе Ґв ў ®зҐаҐ¤Ё,
в® ¬®¦® ЄвЁўЁ§Ёа®ў вм ЇЁб ⥫п.
‚®§¬®¦Ґ ў аЁ в ॠ«Ё§ жЁЁ ¬®Ёв®а б ®¤®© ®зҐаҐ¤мо. …б«Ё
ЇҐаўл¬ ў ®зҐаҐ¤Ё бв®Ёв ЇЁб ⥫м, в® ЄвЁўЁ§ЁагҐвбп ®. …б«Ё
зЁв ⥫м, в® ЄвЁўЁ§Ёаговбп ўбҐ зЁв ⥫Ё ¤® ЇҐаў®Ј® ЇЁб ⥫п. ‚
¤ҐбЄаЁЇв®а е ¤®«¦ Ўлвм а бЄа бЄ Їа®жҐбб®ў зЁв ⥫Ґ© Ё
ЇЁб ⥫Ґ©.
ќв®в ЇаЁ¬Ґа в Є¦Ґ Ё««обваЁагҐв ў®§¬®¦®бвЁ Ї®Ї ¤ Ёп
Їа®жҐбб®ў ў ०Ё¬ ЎҐбЄ®Ґз®Ј® ®¦Ё¤ Ёп ЇаЁ Ґг¤ 箬 ўлЎ®аҐ
«Ј®аЁв¬®ў ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл室 Ё§ ҐЈ®.
‹®ЈЁЄ ЇаЁЄ« ¤ле Їа®жҐбб®ў, в Є¦Ґ ўЁ¤л аҐбгаб®ў Ё Їа ўЁ«
¤®бвгЇ Є Ё¬ ЎҐ§Ја Ёзл.
Џ®н⮬㠯®пвЁҐ ᥬ д®а ¬®¦Ґв Ўлвм ва бд®а¬Ёа®ў ® ў Ў®«ҐҐ
®Ў®ЎйҐл© ®ЎкҐЄв.
ќв®в ®Ў®ЎйҐл© ®ЎкҐЄв §лў Ґвбп я1¬®Ёв®а®¬.я0 Џ®б«Ґ в®Ј® Є Є
¬л а бᬮваЁ¬ Ї®пвЁҐ "¬®Ёв®а", ¬л гўЁ¤Ё¬, з⮠ᥬ д®а пў«пҐвбп
з бвл¬ б«гз Ґ¬ ¬®Ёв®а .
Њ®Ёв®а Ї® ®ЇаҐ¤Ґ«ҐЁо ЇаҐ¤бв ў«пҐв б®Ў®© б®ў®ЄгЇ®бвм
¤ ле Ё Їа®жҐ¤га а Ў®вл б нвЁ¬Ё ¤ л¬Ё. ЏаЁзҐ¬, ў Є зҐб⢥
¤ ле ¬®Ёв®а ¬®Јгв ўлбвгЇ вм Ё ®зҐаҐ¤Ё Їа®жҐбб®ў.
Џа®жҐ¤гал ¬®Ёв®а , Є®в®алҐ ¤®бвгЇл Ї®«м§®ў вҐ«п¬ ¬®Ёв®а
- Їа®жҐбб ¬, §лў овбп ўҐиЁ¬Ё.
Џа®жҐббл Ґ Ё¬Ґов ҐЇ®б।б⢥®Ј® ¤®бвгЇ Є ¤ л¬,
в®«мЄ® зҐаҐ§ ўҐиЁҐ Їа®жҐ¤гал ¬®Ёв®а .
Џа®жҐ¤гал ¬®Ёв®а ᮤҐа¦ в ®ЇҐа жЁЁ, Ї®§ў®«пойЁҐ ®б®ўҐ
«Ё§ ¤ ле ¬®Ёв®а , бв ўЁвм Їа®жҐббл ў ®зҐаҐ¤Ё Ё
ЄвЁўЁ§Ёа®ў вм Ёе.
Ђ«Ј®аЁв¬л «Ё§ ¤ ле § ўЁбпв ®в ᮤҐа¦ ⥫쮩 бв®а®л
§ ¤ зЁ.
Џа®жҐ¤гал ¬®Ёв®а ўлЇ®«повбп ў ०Ё¬Ґ ў§ Ё¬®Ј®
ЁбЄ«о票п. ЏаЁзҐ¬, ў®Їа®б ॠ«Ё§ жЁЁ ў§ Ё¬®Ј® ЁбЄ«о票п - нв®
ўв®аЁзл© ў®Їа®б.
‚®Їа®б ॠ«Ё§ жЁЁ б ¬®Ј® ¬®Ёв®а ⮦Ґ пў«пҐвбп ўв®аЁзл¬
ў®Їа®б®¬.
‘ў®©бвў ¬®Ёв®а , ЇҐаҐзЁб«ҐлҐ ўлиҐ, ¬®Јгв Ўлвм
ॠ«Ё§®ў л Є Є ў ¬®¤г«Ґ, в Є Ё ў ®ЎкҐЄвҐ.
Ў«® ¬®¤г«п, Є®в®ал© ¬®¦Ґв а бб¬ ваЁў вмбп Є Є ¬®Ёв®а,
ЇаҐ¤бв ў«Ґ Ё¦Ґ.
Unit Monitor;
Interface
Procedure M1; {в®зЄЁ ўе®¤ ў ¬®Ёв®а}
Procedure M2;
Implementation
Type
...
Const
... {¤ лҐ, Ґ ¤®бвгЇлҐ Ї®«м§®ў ⥫о}
Var
...
Procedure DisableInterrupt; {ўгв२Ґ Їа®жҐ¤гал ¬®Ёв®а }
Begin
asm cli end;
End;
Procedure EnableInterrupt;
Begin
asm sti end;
End;
{ўгваҐЁе Їа®жҐ¤га ¬®¦Ґв Ўлвм бЄ®«мЄ® гЈ®¤®}
Procedure M1; {Їа®жҐ¤га , бўп§ п б ўе®¤®¬ ў ЄаЁвЁзҐбЄЁ©}
Begin {гз бв®Є}
DisableInterrupt;
...
EnableInterrupt;
End;
Procedure M2; {Їа®жҐ¤га , бўп§ п б ўл室®¬ Ё§ ЄаЁвЁзҐбЄ®Ј®}
Begin {гз бвЄ }
DisableInterrupt;
...
EnableInterrupt;
End;
Begin
{€ЁжЁ «Ё§ жЁп ¤ ле ¬®Ёв®а }
End.
€бЇ®«м§®ў ЁҐ ¬®Ёв®а ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Program Example;
Uses Monitor;
Procedure P1;
Begin
While True Do Begin
...
M1;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
M2;
...
End;
End;
Procedure P2;
Begin
While True Do Begin
...
M1;
ЉаЁвЁзҐбЄЁ© гз бв®Є;
M2;
...
End;
End;
Begin
{€ЁжЁ «Ё§ жЁп п¤а }
End.
Џа®жҐ¤га Њ1 ¬®Ёв®а , «Ё§Ёагп ¤ лҐ, ўлЇ®«пҐв
б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- Їа®ўҐапҐв гб«®ўЁп ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є; ЇаЁ
ўлЇ®«ҐЁЁ нвЁе гб«®ўЁ© Їа®жҐбб, ўл§ў ўиЁ© Їа®жҐ¤гаг Њ1,
Їа®¤®«¦ Ґв ўлЇ®«пвмбп, ў®©¤п ў ЄаЁвЁзҐбЄЁ© гз бв®Є; ЇаЁ
ҐўлЇ®«ҐЁЁ - Їа®жҐбб Ў«®ЄЁагҐвбп ў ®зҐаҐ¤Ё ¬®Ёв®а ;
- гбв ў«Ёў Ґв Ґ®Ўе®¤Ё¬лҐ § зҐЁп ¤ ле ¬®Ёв®а ЇаЁ
Ў«®ЄЁа®ў ЁЁ Їа®жҐбб Ё ЇаЁ Їа®¤®«¦ҐЁЁ ўлЇ®«ҐЁп ў ЄаЁвЁзҐбЄ®¬
гз бвЄҐ.
Џа®жҐ¤га Њ2 ¬®Ёв®а ўлЇ®«пҐв б«Ґ¤гойЁҐ ¤Ґ©бвўЁп:
- гбв ў«Ёў Ґв Ґ®Ўе®¤Ё¬лҐ § зҐЁп ¤ ле ¬®Ёв®а ЇаЁ
ўл室Ґ Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ ;
- Їа®ўҐапҐв гб«®ўЁп ў®§¬®¦®© ЄвЁўЁ§ жЁЁ ¦¤гйЁе Їа®жҐбб®ў Ё
ЄвЁўЁ§ агҐв Ёе ЇаЁ ўлЇ®«ҐЁЁ нвЁе гб«®ўЁ©.
Љ®«ЁзҐбвў® а §«Ёз ойЁебп Їа®жҐ¤га ўе®¤ ў ЄаЁвЁзҐбЄЁ©
гз бв®Є Ё ¬Ґв®¤®ў ўл室 Ё§ ҐЈ® ®ЇаҐ¤Ґ«пҐвбп Є®«ЁзҐбвў®¬
а §®ўЁ¤®б⥩ Їа®жҐбб®ў ў Є ¦¤®© ЇаЁЄ« ¤®© § ¤ зҐ.
Љ Є ўЁ¤® Ё§ ЇаЁўҐ¤Ґ®Ј® ®ЇЁб Ёп, ᥬ д®ал ¬®¦®
а бб¬ ваЁў вм Є Є ¬®Ёв®а б Є®ЄаҐвл¬ «Ј®аЁв¬®¬
дгЄжЁ®Ёа®ў Ёп.
ђҐ «мл¬ ЇаЁ¬Ґа®¬ ¬®Ёв®а б«г¦ в ЎЁЎ«Ё®вҐзлҐ ¬®¤г«Ё
Њ®¤г«л-2, Є®в®ал¬ ЇаЁбў®Ґ ЇаЁ®аЁвҐв.
‚ Њ®¤г«Ґ-2 бгйҐбвўгов ¤ў ўЁ¤ ¬®¤г«Ґ© - Їа®Ја ¬¬лҐ Ё
ЎЁЎ«Ё®вҐзлҐ, «®ЈЁ Program Ё Unit ў Џ бЄ «Ґ.
‘вагЄвга Їа®Ја ¬¬л Њ®¤г«Ґ-2 ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬.
MODULE Name;
IMPORT LIB_MODULE;
...
BEGIN
...
END Name.
ЃЁЎ«Ё®вҐзл© ¬®¤г«м Ё¬ҐҐв б«Ґ¤го饥 ®ЇЁб ЁҐ.
DEFINITION MODULE LIB_MODULE; {¬®¤г«м ®ЇаҐ¤Ґ«ҐЁ©}
Procedure M1; { «®Ј з бвЁ INTERFACE }
Procedure M2;
END LIB_MODULE.
IMPLEMENTATION MODULE LIB_MODULE; {¬®¤г«м ॠ«Ё§ жЁЁ}
{ॠ«Ё§ жЁп ўбҐе Їа®жҐ¤га ¬®¤г«п} { «®Ј з бвЁ IMPLEMENTATION}
END LIB_MODULE.
…бвм Ё ¤агЈЁҐ в®Є®бвЁ ¬®¤г«м®Ј® ЇаЁжЁЇ Ї®бв஥Ёп
Їа®Ја ¬¬ Њ®¤г«Ґ-2, ў з бв®бвЁ - «®Є «млҐ ¬®¤г«Ё, ®ЇЁб лҐ
ўгваЁ ¤агЈЁе ¬®¤г«Ґ©, ® ®Ё Ґ Ё¬Ґов ЇаאַЈ® ®в®иҐЁп Є
а бб¬ ваЁў Ґ¬л¬ ў®Їа®б ¬.
‚ ¦®, зв® б ЎЁЎ«Ё®вҐзл¬ ¬®¤г«Ґ¬ ¬®¦® бўп§ вм Џђ€Ћђ€’…’.
ќв® ¤Ґ« Ґвбп б«Ґ¤гойЁ¬ ®Ўа §®¬.
IMPLEMENTATION MODULE LIB_MODULE[Pr];
‡ Ё¬ҐҐ¬ ¬®¤г«п ў ¬®¤г«Ґ ॠ«Ё§ жЁЁ ў Єў ¤а вле бЄ®ЎЄ е
¬®¦Ґв бв®пвм зЁб«®. ќв® зЁб«® ®ЇаҐ¤Ґ«пҐв ЇаЁ®аЁвҐв ¬®¤г«п.
€вҐаЇаҐв жЁп ЇаЁ®аЁвҐв § ўЁбЁв ®в бЁб⥬л.
Џ® Їа ўЁ« ¬ Њ®¤г«л-2, Ґб«Ё ¬®¤г«м Ё¬ҐҐв ЇаЁ®аЁвҐв, в® ¬®¤г«м
пў«пҐвбп ¬®Ёв®а®¬ Ё ҐЈ® Їа®жҐ¤гал ўлЇ®«повбп ў ०Ё¬Ґ ў§ Ё¬®Ј®
ЁбЄ«о票п, в.Ґ. ®¤®ўаҐ¬Ґ® ¬®¦Ґв ўлЇ®«пвмбп в®«мЄ® ®¤
Їа®жҐ¤га ¬®Ёв®а .
ќв® ¤®бвЁЈ Ґвбп ўЄ«о票Ґ¬ ЁбвагЄжЁ© § ЇаҐв Ё а §аҐиҐЁп
ЇаҐалў Ё© ўе®¤Ґ Ё ўл室Ґ ўҐиЁе Їа®жҐ¤га ¬®Ёв®а б ¬Ё¬
Є®¬ЇЁ«пв®а®¬. ќв® Ў®«м讥 ¤®бв®Ёбвў® бЁбвҐ¬л Њ®¤г« -2, зв®
Ї®«м§®ў вҐ«м Ґ ¬ ЁЇг«ЁагҐв Ё§Є®га®ўҐўл¬Ё ЁбвагЄжЁп¬Ё,
ЁбЇ®«м§гҐв Ї®пвЁҐ ЇаЁ®аЁвҐв ¤«п Ї®бв஥Ёп ¬®Ёв®а .
‚ бЁб⥬Ґ Њ®¤г« -2 дЁа¬л JPI ЇаЁ®аЁвҐв ¬®¤г«п ва ЄвгҐвбп
Є®¬ЇЁ«пв®а®¬ Є Є ¬ бЄ ЇаҐалў Ё©. ’.Ґ., Ґб«Ё ЇаЁ®аЁвҐв 1, в®
¬ бЄЁагҐвбп ЇҐаўл© ўе®¤ Є®ва®««Ґа ЇаҐалў Ё© - ўе®¤ ®в в ©¬Ґа ,
Ґб«Ё ЇаЁ®аЁвҐв 2, в® ¬ бЄЁаговбп ЇаҐалў Ёп ®в Є« ўЁ вгал, Ґб«Ё
ЇаЁ®аЁвҐв 3, в® в.Є. ў ¤ў®Ёз®¬ ўЁ¤Ґ нв® зЁб«® 11, в® ¬ бЄЁаговбп
Є Є ЇаҐалў Ёп ®в в ©¬Ґа , в Є Ё ®в Є« ўЁ вгал. ’.Ґ. ЁбЇ®«м§гҐвбп
Ї® ў®§¬®¦®бвЁ Ў®«ҐҐ в®ЄЁ© ў аЁ в, 祬 Їа®бв® § ЇаҐв
ЇаҐалў Ё©.
‘гйҐбвўгҐв Ў®«м讥 Є®«ЁзҐбвў® ЇаЁЄ« ¤ле § ¤ з, Є®в®алҐ
¬®Јгв Ўлвм аҐиҐл б Ї®¬®ймо ¬®Ёв®а®ў. ђҐиҐЁҐ ҐЄ®в®а®Ј® Ў®а
в ЄЁе § ¤ з пў«пҐвбп ЇаҐ¤¬Ґв®¬ « Ў®а в®але а Ў®в Ї® ¤ЁбжЁЇ«ЁҐ
"‘Ёб⥬л ॠ«м®Ј® ўаҐ¬ҐЁ".
“Є § лҐ § ¤ зЁ ®в®бпвбп Є § ¤ з ¬ ¤ўге вЁЇ®ў:
- § ¤ зЁ, Є®в®алҐ Ї® бў®Ґ© дЁ§ЁзҐбЄ®© ЇаЁа®¤Ґ ®в®бпвбп Є
Їа®Ја ¬¬Ёа®ў Ёо Ї а ««Ґ«мле Їа®жҐбб®ў, з⮠ᮮ⢥вбвўгҐв
ᮤҐа¦ Ёо ¤ ®© ¤ЁбжЁЇ«Ёл;
- § ¤ зЁ, Є®в®алҐ ¬®¤Ґ«Ёагов Ї а ««Ґ«мл¬Ё ўлзЁб«ЁвҐ«мл¬Ё
Їа®жҐбб ¬Ё ҐЄ®в®алҐ аҐ «млҐ бЁвг жЁЁЁ, з⮠ᮮ⢥вбвўгҐв
§ў Ёо ¤ЁбжЁЇ«Ёл "‘Ёб⥬л ॠ«м®Ј® ўаҐ¬ҐЁ.
Љ ЇҐаў®¬г Є« ббг § ¤ з ®в®бпвбп:
1) § ¤ з § зҐЁп ®¤®а®¤ле аҐбгаб®ў;
2) § ¤ з б Їа®жҐбб ¬Ё "зЁв ⥫ﬨ" Ё "ЇЁб ⥫ﬨ".
Љ® ўв®а®¬г Є« ббг § ¤ з ®в®бпвбп:
1) ¬®¤Ґ«м ¦Ґ«Ґ§®¤®а®¦®Ј® ЇҐаҐЈ® ;
2) ¬®¤Ґ«м ¤®а®¦®Ј® ЇҐаҐЄаҐбвЄ ;
3) ¬®¤Ґ«м ®ЎҐ¤ ойЁе дЁ«®б®д®ў;
4) ¬®¤Ґ«м Є«ЁҐв-бҐаўҐа (¬®¦Ґв Ўлвм ®вҐбҐ Ё Є ЇҐаў®¬г
Є« ббг § ¤ з);
5) ¬®¤Ґ«м дгЄжЁ®Ёа®ў Ёп «Ёдв ;
6) ¬®¤Ґ«м Ї аЁЄ¬ еҐабЄ®©.
‡¤Ґбм ¬л а бᬮваЁ¬ § ¤ зЁ ЇҐаў®Ј® Є« бб , Ё««обваЁагойЁҐ
Ў®«ҐҐ б«®¦лҐ гб«®ўЁп Ў«®ЄЁа®ўЄЁ Ё ЄвЁўЁ§ жЁЁ Їа®жҐбб®ў, 祬 ў
ᥬ д®а е.
–Ґ«м а бᬮв२п - Ї®Є § вм, Є Є бв ўпвбп Ї®¤®ЎлҐ § ¤ зЁ,
Ё Є Є®ўл Ї®¤е®¤л Є Ёе аҐиҐЁо.
я2‡ ¤ з § зҐЁп ®¤®а®¤ле аҐбгаб®ў
‡ ¤ з § зҐЁп ®¤®а®¤ле аҐбгаб®ў д®а¬г«ЁагҐвбп
б«Ґ¤гойЁ¬ ®Ўа §®¬.
€¬ҐҐвбп N Ґ¤ЁЁж аҐбгаб Ё Њ Їа®жҐбб®ў. Љ ¦¤л© Ё§ Їа®жҐбб®ў
¬®¦Ґв § Їа®бЁвм «оЎ®Ґ Є®«ЁзҐбвў® R аҐбгаб ®в 1 ¤® N Ґ¤ЁЁж. …б«Ё
㦮Ґ Є®«ЁзҐбвў® R аҐбгаб Ё¬ҐҐвбп, в® ®® ЇаҐ¤®бв ў«пҐвбп
Їа®жҐббг, Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў 㬥ми Ґвбп ўҐ«ЁзЁг
R.
…б«Ё вॡ㥬®Ј® Є®«ЁзҐбвў бў®Ў®¤ле аҐбгаб®ў Ґв ў «ЁзЁҐ,
в® Їа®жҐбб Ў«®ЄЁагҐвбп ¤® Ёе Ї®пў«ҐЁп.
Ћбў®Ў®¦¤ п аҐбгабл, Їа®жҐбб ў®§ўа й Ґв Ёе ў зЁб«® бў®Ў®¤ле
аҐбгаб®ў Ё ЄвЁўЁ§ЁагҐв Їа®жҐббл, Є®в®алҐ бв®пв ў ®зҐаҐ¤Ё Ё
Є®в®ал¬ еў в Ґв бў®Ў®¤ле аҐбгаб®ў.
‘зЁв Ґвбп, зв® ўбҐ Їа®жҐббл а ў®Їа ўл.
Џ®б¬®ваЁ¬, Є Є ¬®¦Ґв ўлЈ«п¤Ґвм ¬®Ёв®а ў н⮬ б«гз Ґ. ЋЇЁиҐ¬
ҐЈ® ў Џ бЄ «Ґ-Ї®¤®Ў®© ®ЎкҐЄв®-®аЁҐвЁа®ў ®© бвагЄвгаҐ.
Type
PMonitor = ^TMonitor;
TMonitor = Object
N : Integer; {Є®«ЁзҐбвў® Ґ¤ЁЁж аҐбгаб®ў}
Nf : Integer; {⥪г饥 Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў}
List : PList; {®зҐаҐ¤м, ў Є®в®а®© Їа®жҐббл ¦¤гв аҐбгабл}
Constructor Init(AN : Integer);
Destructor Done;
Procedure Request(R : Integer);
Procedure Release;
End {TMonitor};
Ћв¬ҐвЁ¬, зв® ¤«п аҐиҐЁп ¤ ®© § ¤ зЁ ў ¤ҐбЄаЁЇв®аҐ
Їа®жҐбб б«Ґ¤гҐв ўл¤Ґ«Ёвм Ї®«Ґ, ў Є®в®а®¬ Ўг¤Ґв еа Ёвмбп
Є®«ЁзҐбвў® § Їа иЁў Ґ¬ле (Є®Ј¤ Їа®жҐбб ¦¤Ґв) Ё ЁбЇ®«м§гҐ¬ле
(Є®Ј¤ Їа®жҐбб Ї®«гзЁ« Ё ўлЇ®«пҐвбп) аҐбгаб®ў.
€бЇ®«м§®ў ЁҐ ¬®Ёв®а ўҐиҐ ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬:
Var
M : PMonitor;
Begin
M := New(PMonitor, Init(10));
...
Dispose(M, Done);
End.
Procedure Proc1;
Begin
While True Do Begin
...
M^.Request(б«гз ©®Ґ зЁб«® ®в 1 ¤® N);
...
M^.Release;
...
End {While};
End {Proc1};
ђ бЄа®Ґ¬ ᮤҐа¦ ЁҐ ¬Ґв®¤®ў ¬®Ёв®а .
Constructor TMonitor.Init(AN : Integer);
Begin
N := AN;
Nf := N;
List := New(PList, Init);
End {TMonitor.Init};
Destructor TMonitor.Done;
Begin
Dispose(List, Done)
End {TMonitor.Done};
Procedure TMonitor.Request(R : Integer);
Begin
‡ ЇаҐв_ЇаҐалў Ё©;
‡ ЇЁб вм ў ¤ҐбЄаЁЇв®а § 票Ґ R;
If R > Nf Then Begin
List^.Insert(’ҐЄгйЁ©_Їа®жҐбб);
Џ…ђ…ЌЂ‡ЌЂ—€’њ_ЏђЋ–…‘‘Ћђ;
End {If};
Nf := Nf - R;
ђ §аҐиҐЁҐ_ЇаҐалў Ё©;
End {TMonitor.Request};
“б«®ўЁҐ ЇаҐ¤®бв ў«ҐЁп аҐбгаб®ў Їа®жҐббг ¬л § ЇЁб «Ё
б«Ґ¤гойЁ¬ ®Ўа §®¬:
Ґб«Ё Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў Ў®«миҐ Ё«Ё а ў®
Є®«ЁзҐбвўг § Їа иЁў Ґ¬ле аҐбгаб®ў, в® Їа®жҐбб § еў влў Ґв
вॡ㥬®Ґ Є®«ЁзҐбвў® аҐбгаб®ў Ё Їа®¤®«¦ Ґв ўлЇ®«пвмбп;
Ґб«Ё Є®«ЁзҐбвў® бў®Ў®¤ле аҐбгаб®ў ¬ҐмиҐ, 祬 Є®«ЁзҐбвў®
§ Їа иЁў Ґ¬ле аҐбгаб®ў, Їа®жҐбб Ў«®ЄЁагҐвбп ў ®зҐаҐ¤Ё ¬®Ёв®а .
‚தҐ Ўл ўбҐ «®ЈЁз®, ® ¬®¦Ґв Ё¬Ґвм ¬Ґбв®, ЇаЁ¬Ґа,
б«Ґ¤гой п бЁвг жЁп.
ЏаҐ¤Ї®«®¦Ё¬, зв® Ґбвм Їа®жҐбб, бв®пйЁ© ў ®зҐаҐ¤Ё, Є®в®а®¬г
вॡгҐвбп Ў®«м讥 Є®«ЁзҐбвў® аҐбгаб®ў, бў®Ў®¤ле аҐбгаб®ў ўбҐ
ўаҐ¬п ®Є §лў Ґвбп ¬ҐмиҐ, 祬 вॡ㥬®Ґ. ЏаЁ н⮬ бў®Ў®¤лҐ
аҐбгабл ўбҐ ўаҐ¬п § Ё¬ овбп Ё ®бў®Ў®¦¤ овбп Їа®жҐбб ¬Ё, Є®в®ал¬
вॡгҐвбп ¬ «®Ґ Є®«ЁзҐбвў® аҐбгаб®ў.
ќв® ЇаЁў®¤Ёв Є ⮬г, зв® Їа®жҐбб, § Їа иЁў ойЁ© Ў®«м讥
Є®«ЁзҐбвў® аҐбгаб®ў, ¬®¦Ґв ®Є § вмбп ў б®бв®пЁЁ "ЎҐбЄ®Ґз®Ј®
®¦Ё¤ Ёп". ќв® бҐамҐ§л© Ґ¤®бв в®Є «Ј®аЁв¬ ¬®Ёв®а .
Љ Є гбва Ёвм нв®в Ґ¤®бв в®Є?
Ќ ЇаЁ¬Ґа, гб«®¦Ёвм гб«®ўЁҐ Ў«®ЄЁа®ўЄЁ Їа®жҐбб , ¤®Ў ўЁў ў
ҐЈ® б«Ґ¤го饥:
If я2R > Nf €‹€ …бвм Їа®жҐббл ў ®зҐаҐ¤Ё ¬®Ёв®а я0 Then Begin
...
End {If};
‚ н⮬ б«гз Ґ, Їа®жҐббл, вॡгойЁҐ ¬ «®Ј® Є®«ЁзҐбвў
аҐбгаб®ў, Ґ ᬮЈгв Ї®«гз вм Ёе ў ®Ўе®¤ Їа®жҐбб , вॡго饣®
Ў®«ми®Ј® Є®«ЁзҐбвў аҐбгаб®ў.
•®вп Їа®жҐббл, вॡгойЁҐ ¬ «®Ј® Є®«ЁзҐбвў аҐбгаб®ў, Ўг¤гв
ҐбвЁ ҐЇа®Ё§ў®¤ЁвҐ«млҐ Ї®вҐаЁ, в.Є. Ўг¤гв бЁвг жЁЁ, Є®Ј¤
бў®Ў®¤ле аҐбгаб®ў ¤®бв в®з®, ® ®Ё Ґ Ўг¤г⠢뤥«пвмбп, в.Є.
Ґбвм Їа®жҐббл ў ®зҐаҐ¤Ё ¬®Ёв®а .
Ђ «®ЈЁзлҐ бЁвг жЁЁ ¬®Јгв Ё¬Ґвм ¬Ґбв® ЇаЁ ®бў®Ў®¦¤ҐЁЁ
аҐбгаб®ў.
‡ ЇЁиҐ¬ ў аЁ в ¬Ґв®¤ TMonitor.Release.
Procedure TMonitor.Release;
Begin
‡ ЇаҐв_ЇаҐалў Ё©;
Nf := Nf + R;
ЏҐаҐўҐбвЁ ў ®зҐаҐ¤м Ј®в®ўле ўбҐ Їа®жҐббл, ¤«п Є®в®але б㬬
вॡ㥬ле аҐбгаб®ў ¬ҐмиҐ Ё«Ё а ў б㬬Ґ бў®Ў®¤ле
аҐбгаб®ў, Ґ § ўЁбЁ¬® ®в Ёе ¬Ґбв ў ®зҐаҐ¤Ё;
ђ §аҐиҐЁҐ_ЇаҐалў Ё©;
End {TMonitor.Release};
‚ н⮬ б«гз Ґ, Ґб«Ё ў з «Ґ ®зҐаҐ¤Ё 室Ёвбп Їа®жҐбб,
¦¤гйЁ© Ў®«ми®Ј® Є®«ЁзҐбвў аҐбгаб®ў, ® в Є¦Ґ ¬®¦Ґв Ґ
ЄвЁўЁ§Ёа®ў вмбп ЎҐбЄ®Ґз® ¤®«Ј®.
—в®Ўл гбва Ёвм гЄ § л© Ґ¤®бв в®Є, ¬®¦® Їа ўЁ«®
ЄвЁўЁ§ жЁЁ Їа®жҐбб®ў § ЇЁб вм б«Ґ¤гойЁ¬ ®Ўа §®¬:
While ®зҐаҐ¤м Ґ Їгбв п Do Begin
If ЇҐаў®¬г ў ®зҐаҐ¤Ё Їа®жҐббг еў вЁв бў®Ў®¤ле аҐбгаб®ў,
Then
ЇҐаҐўҐбвЁ нв®в Їа®жҐбб ў ®зҐаҐ¤м Ј®в®ўле Їа®жҐбб®ў
Else
Break
End {While};
’.Ґ. ЄвЁўЁ§ жЁо ў «оЎ®¬ б«гз Ґ б«Ґ¤гҐв зЁ вм б ЇҐаў®Ј®
Їа®жҐбб .
„ л© ЇаЁ¬Ґа Ї®Є §лў Ґв е а ЄвҐа Їа®Ў«Ґ¬, ў®§ЁЄ ойЁе ЇаЁ
¤®бвгЇҐ Їа®жҐбб®ў Є аҐбгаб ¬, Ё бЇ®б®Ў®ў Ёе гбва ҐЁп.
‚ ¦®© Їа®Ў«Ґ¬®© пў«пҐвбп ®Ї б®бвм ®Є § вмбп ў ०Ё¬Ґ
ЎҐбЄ®Ґз®Ј® ®¦Ё¤ Ёп ҐЄ®в®ал¬Ё Їа®жҐбб ¬Ё ў ®зҐаҐ¤пе ¬®Ёв®а .
ЃҐбЄ®Ґз®Ґ ®¦Ё¤ ЁҐ гбва пҐвбп ЁбЇ®«м§®ў ЁҐ¬ Ї®¤е®¤пйЁе
«Ј®аЁв¬®ў ЄвЁўЁ§ жЁЁ, ¬®¦Ґв Ўлвм ¤ ¦Ґ Їг⥬ ®вЄ § ®в «Ґ¦ йЁе
Ї®ўҐае®бвЁ ЇаҐЁ¬гйҐбвў.
я2‡ ¤ з б Їа®жҐбб ¬Ё "зЁв ⥫ﬨ" Ё "ЇЁб ⥫ﬨ"
Ћв«ЁзЁҐ ¤ ®© § ¤ зЁ ®в ЇаҐ¤л¤г饩 б®бв®Ёв ў ⮬, зв® §¤Ґбм
Ґбвм ¤ў вЁЇ Їа®жҐбб®ў б а §л¬Ё Їа ў ¬Ё ¤®бвгЇ Є аҐбгабг.
…бвм ҐЄ®в®ал© аҐбгаб, ЇаЁ¬Ґа, д ©«.
…бвм ҐбЄ®«мЄ® Їа®жҐбб®ў-зЁв ⥫Ґ©, Є®в®алҐ ¬®Јгв в®«мЄ®
зЁв вм ᮤҐа¦Ё¬®Ґ д ©« , Ё Ґбвм ҐбЄ®«мЄ® Їа®жҐбб®ў-ЇЁб ⥫Ґ©,
Є®в®алҐ ¬®Јгв ¬®¤ЁдЁжЁа®ў вм ᮤҐа¦Ё¬®Ґ д ©« .
‚ «оЎ®© ¬®¬Ґв б д ©«®¬ ¬®¦Ґв а Ў®в вм Ё«Ё ®¤Ё ЇЁб вҐ«м Ё«Ё
«оЎ®Ґ Є®«ЁзҐбвў® зЁв ⥫Ґ©.
Џ® Є®«ЁзҐбвўг вЁЇ®ў Їа®жҐбб®ў - ¤ў , ¬®Ёв®а Ё¬ҐҐв ¤ўҐ
Їа®жҐ¤гал ¤®бвгЇ Є д ©«г Ё ¤ўҐ Їа®жҐ¤гал ®бў®Ў®¦¤ҐЁп д ©« .
Type
PMOnitor = ^TMonitor;
TMonitor = Object
Nr, {Є®«ЁзҐбвў® зЁв ⥫Ґ© Ё ЇЁб ⥫Ґ©,}
Nw : Integer; {а Ў®в ойЁе б д ©«®¬}
RList : PList;
WList : PList;
Constructor Init;
Destructor Done;
Procedure Enter_R;
Procedure Enter_W;
Procedure Exit_R;
Procedure Exit_W;
End {TMonitor};
€ЁжЁ «Ё§ жЁп ¤ ®Ј® ¬®Ёв®а «®ЈЁз ЁЁжЁ «Ё§ жЁЁ
ЇаҐ¤л¤г饣® ¬®Ёв®а .
Procedure Reader; Procedure Writer;
Begin Begin
While True Do Begin While True Do Begin
... ...
M^.Enter_R; M^.Enter_W;
... ...
M^.Exit_R; M^.Exit_W;
... ...
End {While}; End {While};
End {Reader}; End {Writer};
’ॡгҐвбп д®а¬ «Ё§®ў вм гб«®ўЁп ¤®бвгЇ Є д ©«г зЁв вҐ«п Ё
ЇЁб вҐ«п Ё Їа ўЁ« ЄвЁўЁ§ жЁЁ Їа®жҐбб®ў ЇаЁ ®бў®Ў®¦¤ҐЁЁ д ©« .
“б«®ўЁҐ ¤®бвгЇ Є д ©«г ЇЁб ⥫п:
…б«Ё д ©« § пв ЇЁб ⥫Ґ¬ Ё«Ё зЁв ⥫ﬨ, в®
Ў«®ЄЁа®ўЄ ;
„ ®Ґ гб«®ўЁҐ д®а¬ «Ё§гҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
If Nw > 0 OR Nr > 0 Then ... .
“б«®ўЁҐ ¤®бвгЇ Є д ©«г зЁв ⥫п:
…б«Ё д ©« § пв ЇЁб ⥫Ґ¬, в® {зЁв ⥫Ґ© ¬®¦Ґв Ўлвм ҐбЄ®«мЄ®}
Ў«®ЄЁа®ўЄ ;
„ ®Ґ гб«®ўЁҐ д®а¬ «Ё§гҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
If Nw > 0 Then ... .
ЏаҐ¤Ї®«®¦Ё¬, зв® зЁв ⥫Ё § еў вЁ«Ё д ©«. „®Ў «ҐЁҐ ¤агЈЁе
зЁв ⥫Ґ© ў®§¬®¦®, Ґб«Ё д ©« § еў зҐ зЁв ⥫ﬨ. Џ®н⮬г
Ї®пў«пҐвбп ®Ї б®бвм, зв® ЇЁб вҐ«м ЎҐбЄ®Ґз® ¤®«Ј® Ўг¤Ґв ¦¤ вм
¤®бвгЇ Є д ©«г, Ґб«Ё Є Ґ¬г Ўг¤г⠢ᥠўаҐ¬п ®Ўа й вмбп зЁв ⥫Ё.
ЋЈа ЁзЁвм ¤®бвгЇ зЁв ⥫Ґ© Є д ©«г ¬®¦®, гб«®¦Ёў гб«®ўЁҐ
¤®бвгЇ :
…б«Ё я2д ©« § пв ЇЁб ⥫Ґ¬ €‹€ Ґбвм ЇЁб ⥫Ё ў ®зҐаҐ¤Ё,я0 в®
Ў«®ЄЁа®ўЄ ;
‚ле®¤л Ё§ ЄаЁвЁзҐбЄ®Ј® гз бвЄ ¤«п зЁв вҐ«п Ё ЇЁб ⥫п
ўлЈ«п¤пв б«Ґ¤гойЁ¬ ®Ўа §®¬.
я2—Ёв ⥫м:
…б«Ё Ґв зЁв ⥫Ґ©, а Ў®в ойЁе б д ©«®¬, € Ґбвм ЇЁб вҐ«м ў
®зҐаҐ¤Ё,
в® ЄвЁўЁ§ жЁп ЇЁб ⥫п;
я2ЏЁб ⥫м:
Љ Є Ўлвм ЇЁб ⥫о, Ґб«Ё Ґбвм Ё ЇЁб ⥫Ё Ё зЁв ⥫Ё ў
®зҐаҐ¤пе. €вгЁвЁў® Є ¦Ґвбп, зв® г ЇЁб вҐ«п ¤®«¦Ґ Ўлвм
ЇаЁ®аЁвҐв ЇҐаҐ¤ зЁв ⥫ﬨ. Џ®н⮬㠯Ёб вҐ«м ¤®«¦Ґ
ЄвЁўЁ§Ёа®ў вм ЇЁб вҐ«п ¦Ґ. Ћ¤ Є® ў н⮬ б«гз Ґ Ї®пў«пҐвбп
®Ї б®бвм ЎҐбЄ®Ґз®Ј® ®¦Ё¤ Ёп зЁв ⥫Ґ©. Џ®н⮬㠫гзиҐ, Ґб«Ё
ЇЁб вҐ«м Ўг¤Ґв ЄвЁўЁ§Ёа®ў вм зЁв ⥫Ґ©, Ґб«Ё Ёе Ґв ў ®зҐаҐ¤Ё,
в® ¬®¦® ЄвЁўЁ§Ёа®ў вм ЇЁб ⥫п.
‚®§¬®¦Ґ ў аЁ в ॠ«Ё§ жЁЁ ¬®Ёв®а б ®¤®© ®зҐаҐ¤мо. …б«Ё
ЇҐаўл¬ ў ®зҐаҐ¤Ё бв®Ёв ЇЁб ⥫м, в® ЄвЁўЁ§ЁагҐвбп ®. …б«Ё
зЁв ⥫м, в® ЄвЁўЁ§Ёаговбп ўбҐ зЁв ⥫Ё ¤® ЇҐаў®Ј® ЇЁб ⥫п. ‚
¤ҐбЄаЁЇв®а е ¤®«¦ Ўлвм а бЄа бЄ Їа®жҐбб®ў зЁв ⥫Ґ© Ё
ЇЁб ⥫Ґ©.
ќв®в ЇаЁ¬Ґа в Є¦Ґ Ё««обваЁагҐв ў®§¬®¦®бвЁ Ї®Ї ¤ Ёп
Їа®жҐбб®ў ў ०Ё¬ ЎҐбЄ®Ґз®Ј® ®¦Ё¤ Ёп ЇаЁ Ґг¤ 箬 ўлЎ®аҐ
«Ј®аЁв¬®ў ўе®¤ ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл室 Ё§ ҐЈ®.
Соседние файлы в папке Операционные среды АСОИУ