ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·ΡŠΠ΅ΠΌΠΎΠ² для ΠΌΠ΅ΠΆΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

НиТС Π±ΡƒΠ΄ΡƒΡ‚ описаны Ρ‚Ρ€ΠΈ класса-Ρ€Π°Π·ΡŠΠ΅ΠΌΠ° для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ слабо связанного ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, сильно связанного ΠΎΠ±ΠΌΠ΅Π½Π° Π±Π΅Π· ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΈ ΡΠΈΠ»ΡŒΠ½ΠΎ связанного ΠΎΠ±ΠΌΠ΅Π½Π° с ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·ΡŠΠ΅ΠΌ прСдставляСт собой ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это дСлаСтся. Π’ Ρ€Π°Π·ΡŠΠ΅ΠΌΠ°Ρ… примСняСтся синхронизация ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ. Π’Π°ΠΊΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π·ΡŠΠ΅ΠΌΠΎΠ² для ΠΌΠ΅ΠΆΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ»Π°ΡΡΡ‹-Ρ€Π°Π·ΡŠΠ΅ΠΌΡ‹ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΌΠ΅ΠΆΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сильно ΠΈ ΡΠ»Π°Π±ΠΎ связанный ΠΎΠ±ΠΌΠ΅Π½ сообщСниями. БСрвисы для ΠΌΠ΅ΠΆΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠ΅ ядро. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π² Ρ‡Π°ΡΡ‚ности 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), описанным Ρ€Π°Π½Π΅Π΅.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ