Скачиваний:
18
Добавлен:
01.05.2014
Размер:
16.79 Кб
Скачать
я_я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ЏЁб вҐ«м:
Љ Є Ўлвм ЇЁб вҐ«о, Ґб«Ё Ґбвм Ё ЇЁб вҐ«Ё Ё зЁв вҐ«Ё ў
®зҐаҐ¤пе. €­вгЁвЁў­® Є ¦Ґвбп, зв® г ЇЁб вҐ«п ¤®«¦Ґ­ Ўлвм
ЇаЁ®аЁвҐв ЇҐаҐ¤ зЁв вҐ«п¬Ё. Џ®н⮬㠯Ёб вҐ«м ¤®«¦Ґ­
 ЄвЁўЁ§Ёа®ў вм ЇЁб вҐ«п ¦Ґ. Ћ¤­ Є® ў н⮬ б«гз Ґ Ї®пў«пҐвбп
®Ї б­®бвм ЎҐбЄ®­Ґз­®Ј® ®¦Ё¤ ­Ёп зЁв вҐ«Ґ©. Џ®н⮬㠫гзиҐ, Ґб«Ё
ЇЁб вҐ«м Ўг¤Ґв  ЄвЁўЁ§Ёа®ў вм зЁв вҐ«Ґ©,   Ґб«Ё Ёе ­Ґв ў ®зҐаҐ¤Ё,
в® ¬®¦­®  ЄвЁўЁ§Ёа®ў вм ЇЁб вҐ«п.

‚®§¬®¦Ґ­ ў аЁ ­в ॠ«Ё§ жЁЁ ¬®­Ёв®а  б ®¤­®© ®зҐаҐ¤мо. …б«Ё
ЇҐаўл¬ ў ®зҐаҐ¤Ё бв®Ёв ЇЁб вҐ«м, в®  ЄвЁўЁ§ЁагҐвбп ®­. …б«Ё
зЁв вҐ«м, в®  ЄвЁўЁ§Ёаговбп ўбҐ зЁв вҐ«Ё ¤® ЇҐаў®Ј® ЇЁб вҐ«п. ‚
¤ҐбЄаЁЇв®а е ¤®«¦­  Ўлвм а бЄа бЄ  Їа®жҐбб®ў ­  зЁв вҐ«Ґ© Ё
ЇЁб вҐ«Ґ©.

ќв®в ЇаЁ¬Ґа в Є¦Ґ Ё««обваЁагҐв ў®§¬®¦­®бвЁ Ї®Ї ¤ ­Ёп
Їа®жҐбб®ў ў ०Ё¬ ЎҐбЄ®­Ґз­®Ј® ®¦Ё¤ ­Ёп ЇаЁ ­Ґг¤ з­®¬ ўлЎ®аҐ
 «Ј®аЁв¬®ў ўе®¤  ў ЄаЁвЁзҐбЄЁ© гз бв®Є Ё ўл室  Ё§ ­ҐЈ®.

Соседние файлы в папке Операционные среды АСОИУ