ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ² Π΄Π»Ρ ΠΌΠ΅ΠΆΠ·Π°Π΄Π°ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΉ
ΠΠΈΠΆΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°-ΡΠ°Π·ΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π°Π±ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Π±Π΅Π· ΠΎΡΠ²Π΅ΡΠ° ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ. Π ΡΠ°Π·ΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ. Π’Π°ΠΊΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ² Π΄Π»Ρ ΠΌΠ΅ΠΆΠ·Π°Π΄Π°ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΉ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ»Π°ΡΡΡ-ΡΠ°Π·ΡΠ΅ΠΌΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡ Π΄Π΅ΡΠ°Π»ΠΈ ΠΌΠ΅ΠΆΠ·Π°Π΄Π°ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΠΈ ΡΠ»Π°Π±ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π‘Π΅ΡΠ²ΠΈΡΡ Π΄Π»Ρ ΠΌΠ΅ΠΆΠ·Π°Π΄Π°ΡΠ½ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΉ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Ada ΠΈΠ»ΠΈ Java. ΠΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ ΡΠ·ΡΠΊΠΎΠ² Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π°Π±ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π§ΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡ MessageQueue, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΠΈΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΉ. ΠΠ»Π°ΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°Π·ΡΠ΅ΠΌΠ°ΠΌΠΈ.
ΠΠΈΠΆΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°-ΡΠ°Π·ΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π°Π±ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Π±Π΅Π· ΠΎΡΠ²Π΅ΡΠ° ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ. Π ΡΠ°Π·ΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ. Π’Π°ΠΊΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π² ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ ΡΠ°ΠΊ ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ.
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΠΌΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π Π°Π·ΡΠ΅ΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ»Π°Π±ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΠΈΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°. Π Π°Π·ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ send Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠ΅ΠΉ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ) ΠΈ receive Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠ΅ΠΉ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ) — ΡΠΈΡ. 10.4. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° (messageCount = maxCount) ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΎΠΌΠ΅ΡΡΠΈΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΡΡΠ»Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΡΡΠ° (messageCount = 0) ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΡΡΠΏΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π΅ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
monitor MessageQueue.
- — ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ,
- — ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π½Π° maxCount
- — ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ
- — Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
private maxCount: Integer;
private messageCount: Integer = 0;
public send (in message).
while messageCount = maxCount do wait;
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ;
Π£Π²Π΅Π»ΠΈΡΠΈΡΡ messageCount;
if messageCount = 1 then signal;
end send;
public receive (out message).
while messageCount = 0 do wait;
ΠΠ·Π²Π»Π΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ;
Π£ΠΌΠ΅Π½ΡΡΠΈΡΡ messageCount;
if messageCount = maxCount — 1 then signal;
end receive;
end MessageQueue;
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΠΌΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π Π°Π·ΡΠ΅ΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Π±Π΅Π· ΠΎΡΠ²Π΅ΡΠ°. ΠΡΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΠΈΠΉ Π±ΡΡΠ΅Ρ Π½Π° ΠΎΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π Π°Π·ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (ΡΠΈΡ. 10.5). ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ send, Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ — ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ receive. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π±ΡΡΠ΅Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½. ΠΠΎΠΌΠ΅ΡΡΠΈΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±ΡΡΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΆΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠΌΠ΅Ρ Π΅Π³ΠΎ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΡΠ΅Ρ ΠΏΡΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
monitor MessageBuffer.
- — ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ
- — ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ
- — ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ
- — Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
private messageBufferFull: Boolean = false;
private messageCount: Integer = 0;
public send (in message).
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±ΡΡΠ΅Ρ;
messageBufferFull = true;
signal;
while messageBufferFull = true do wait;
end send;
public receive (out message).
while messageBufferFull = false do wait;
ΠΠ·Π²Π»Π΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°;
messageBufferFull = false;
signal;
end receive;
end MessageBuffer;
Π ΠΈΡ. 7. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π·ΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΠΌΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π³ΠΎ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ. Π Π°Π·ΡΠ΅ΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ. ΠΡΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΠΈΠΉ Π±ΡΡΠ΅Ρ Π½Π° ΠΎΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π±ΡΡΠ΅Ρ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ²Π΅Ρ. Π Π°Π·ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ° (ΡΠΈΡ. 10.6). ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ send Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ — ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ receive Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ reply Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ°. ΠΠΎΠΌΠ΅ΡΡΠΈΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±ΡΡΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΆΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΡΠ΅Ρ ΠΏΡΡΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
monitor MessageBuffer&Response.
- — ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ
- — ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ
- — ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈ Π±ΡΡΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ
- — Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ°.
- — ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎ
- — ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
private messageBufferFull: Boolean = false;
private responseBufferFull: Boolean = false;
private messageCount: Integer = 0;
public send (in message).
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±ΡΡΠ΅Ρ;
messageBufferFull = true;
signal ;
while responseBufferFull = false do wait;
ΠΠ·Π²Π»Π΅ΡΡ ΠΎΡΠ²Π΅Ρ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°;
responseBufferFull = false;
end send;
public receive (out message).
while messageBufferFull = false do wait;
ΠΠ·Π²Π»Π΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°;
messageBufferFull = false;
end receive;
public reply (in response).
ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ Π² Π±ΡΡΠ΅Ρ;
responseBufferFull = true;
signal ;
end reply;
end MessageBuffer&Response.
Π ΠΈΡ. 8. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π·ΡΠ΅ΠΌΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ
ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ, ΠΎΠ±ΡΠ°ΡΡΠΈΡ ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΡΠ°Π·ΡΠ΅ΠΌΠΎΠ². ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ ΠΠ°Π½ΠΊΠΎΠΌΠ°Ρ. Π Π°Π·ΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ Π½Π° ΡΠΈΡ. 10.7; Π΅ΡΡΡ Π΄Π²Π° ΡΠ°Π·ΡΠ΅ΠΌΠ° — ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·ΡΠ΅ΠΌ — Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Π ΠΈΡ. 9. ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΠ°Π·ΡΠ΅ΠΌΡ
ΠΠ±ΡΠ΅ΠΊΡ ΠΡΠ΅ΡΠ΅Π΄Ρ Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠ°Π½ΠΊΠΎΠΌΠ°ΡΠΎΠΌ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΠ°Π½ΠΊΠΎΠΌΠ°ΡΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΠ±ΡΠ΅ΠΊΡ ΠΡΠ΅ΡΠ΅Π΄Ρ Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΡΠ»Π°Π΅ΠΌΡΡ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΠ°Π½ΠΊΠΎΠΌΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ΅ ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΠ»ΠΈΠ΅Π½ΡΠ°. Π Π² ΡΠΎΠΌ, ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ send ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΡΠ°Π·ΡΠ΅ΠΌΠ°, Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ — ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ receive ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΌΠ΅Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·ΡΠ΅ΠΌ Π±ΡΡΠ΅Ρ Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π£ΡΡΡΠΎΠΉΡΡΠ²Π° Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π±Π΅Π· ΠΎΡΠ²Π΅ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΠ°Π½ΠΊΠΎΠΌΠ°ΡΠ° ΠΈ ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π£ΡΡΡΠΎΠΉΡΡΠ²Π° Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΠ°ΡΡΠΎΡΠ΅ΠΊ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ ΠΠ°Π½ΠΊΠΎΠ²ΡΠΊΠΎΠ³ΠΎ Π‘Π΅ΡΠ²Π΅ΡΠ°. ΠΠ½ ΡΠΊΡΡΠ²Π°Π΅Ρ Π΄Π΅ΡΠ°Π»ΠΈ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ ΠΠ°Π½ΠΊΠΎΠ²ΡΠΊΠΈΠΌ Π‘Π΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Π±Π΅Π· ΠΎΡΠ²Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ·ΡΠΊΠ΅ Java ΡΡΠΎΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π±Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (RMI), ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅.