Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 7

Автор АлСксандр ΠšΡ€ΡƒΡ‡ΠΈΠ½ΠΈΠ½

На листингС 3 прСдставлСны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Ρ…ΠΎΠ΄Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· критичСской области, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π² синтаксисС АссСмблСра.


Листинг 3 – Π’Ρ…ΠΎΠ΄ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· критичСской области с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ TSL


ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, процСсс Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ enter_region, которая выполняСт Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° устанавливаСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ возвращаСтся. По Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· критичСской области процСсс Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ leave_region, ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΡƒΡŽ 0 Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ LOCK. Как ΠΈ Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ критичСской области, для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСсс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ своСврСмСнно, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ удастся.

2.3.2 ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ мСТпроцСссного взаимодСйствия

РСшСниС ΠŸΠ΅Ρ‚Π΅Ρ€ΡΠΎΠ½Π° ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ TSL ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹, Π½ΠΎ Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ нСдостаток – использованиС Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ оТидания. Π’.Π΅. процСсс Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ†ΠΈΠΊΠ», оТидая возмоТности Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ.

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

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вмСсто Ρ†ΠΈΠΊΠ»ΠΎΠ² оТидания ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ мСТпроцСссного взаимодСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ процСссы Π² случаС Π·Π°ΠΏΡ€Π΅Ρ‚Π° Π½Π° Π²Ρ…ΠΎΠ΄ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Одной ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… являСтся ΠΏΠ°Ρ€Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² sleep ΠΈ wakeup. ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² sleep – ΡΠΈΡΡ‚Π΅ΠΌΠ½Ρ‹ΠΉ запрос, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс блокируСтся, ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ Π½Π΅ запустит Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс. Π£ запроса wakeup Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ – процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρƒ ΠΎΠ±ΠΎΠΈΡ… запросов – адрСса ячСйки памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для согласования запросов оТидания ΠΈ запуска.

Π”Π²Π° процСсса совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Один ΠΈΠ· Π½ΠΈΡ…, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€, Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ считываСт ΠΈΡ… ΠΎΡ‚Ρ‚ΡƒΠ΄Π°. Врудности Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΡ„Π΅Ρ€ ΠΏΠΎΠ»ΠΎΠ½. Для производитСля Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ частично Π½Π΅ очистит Π±ΡƒΡ„Π΅Ρ€. Аналогично, Ссли ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°, Π° Π±ΡƒΡ„Π΅Ρ€ пуст, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС оТидания ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ Ρ€Π°Π·Π±ΡƒΠ΄ΠΈΡ‚ Π΅Π³ΠΎ.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ каТСтся достаточно простым, Π½ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ состояниям состязания. НуТна пСрСмСнная count для отслСТивания количСства элСмСнтов Π² Π±ΡƒΡ„Π΅Ρ€Π΅. Если максимальноС число элСмСнтов, хранящихся Π² Π±ΡƒΡ„Π΅Ρ€Π΅, Ρ€Π°Π²Π½ΠΎ N, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° производитСля Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π»ΠΈ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π±ΡƒΡ„Π΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count Ρ€Π°Π²Π½ΠΎ N, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС оТидания; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count.

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ потрСбитСля прост: сначала ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count Π½ΡƒΠ»ΡŽ. Если Ρ€Π°Π²Π½ΠΎ, Ρ‚ΠΎ ΡƒΠΉΡ‚ΠΈ Π² состояниС оТидания; ΠΈΠ½Π°Ρ‡Π΅ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· процСссов Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π½Π΅ слСдуСт Π»ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс, ΠΈ Π² случаС нСобходимости ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ это. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±ΠΎΠΈΡ… процСссов прСдставлСны Π² листингС 4.


Листинг 4 – ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° производитСля ΠΈ потрСбитСля с состояниСм сорСвнования


Для описания Π½Π° языкС Π‘ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² sleep ΠΈ wakeup ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ прСдставлСны Π² Π²ΠΈΠ΄Π΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€. Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π‘ ΠΈΡ… Π½Π΅Ρ‚, Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ доступны Π² любой систСмС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ insert_item ΠΈ remove_item ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ элСмСнты Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ ΠΈΡ… ΠΎΡ‚Ρ‚ΡƒΠ΄Π°.

Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ состояния состязания Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ count Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½. ΠœΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ситуация: Π±ΡƒΡ„Π΅Ρ€ пуст, ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ считал Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ count, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ Π½ΡƒΠ»ΡŽ. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ помСстил элСмСнт Π² Π±ΡƒΡ„Π΅Ρ€ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ², Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΎ стало Ρ€Π°Π²Π½ΠΎ 1. Зная, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π²Π½ΠΎ 0 ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ находился Π² состоянии оТидания, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° wakeup.

Но ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ Π±Ρ‹Π» Π² состоянии оТидания, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сигнал Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΏΠ°Π» Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. Когда ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ, ΠΎΠ½ вСрнСтся ΠΊ считанному ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ count, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 0, ΠΈ ΡƒΠΉΠ΄Π΅Ρ‚ Π² состояниС оТидания. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π½Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ Π±ΡƒΡ„Π΅Ρ€ ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΉΠ΄Π΅Ρ‚ Π² состояниС оТидания. Оба процСсса Ρ‚Π°ΠΊ ΠΈ останутся Π² этом состоянии.

Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сигнал Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠΉ ΠΊ процСссу, Π½Π΅ находящСмуся Π² состоянии оТидания, ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚. Если Π±Ρ‹ Π½Π΅ это, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΎ. Быстрым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΡ‚Π° оТидания Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если сигнал Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ послан процСссу, Π½Π΅ находящСмуся Π² состоянии оТидания, этот Π±ΠΈΡ‚ устанавливаСтся. ПозТС, ΠΊΠΎΠ³Π΄Π° процСсс пытаСтся ΡƒΠΉΡ‚ΠΈ Π² состояниС оТидания, Π±ΠΈΡ‚ оТидания Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ сбрасываСтся, Π½ΠΎ процСсс остаСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎΡ‚ Π±ΠΈΡ‚ исполняСт Ρ€ΠΎΠ»ΡŒ ΠΊΠΎΠΏΠΈΠ»ΠΊΠΈ сигналов Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΠΈΡ‚Π° оТидания запуска спасло ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π»Π΅Π³ΠΊΠΎ ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с нСсколькими процСссами, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно. МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚, ΠΈΠ»ΠΈ 8, ΠΈΠ»ΠΈ 32, Π½ΠΎ это Π½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π’ 1965 Π³ΠΎΠ΄Ρƒ ДСйкстра [16] ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСмафор – ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для подсчСта сигналов запуска. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ – ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ синхронизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ рСсурсу. Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто sleep ΠΈ wakeup Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ down ΠΈ up. Π˜Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора большС нуля, Ρ‚ΠΎ down просто ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π° 1 ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссу, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС процСсс пСрСводится Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ значСния сСмафора, Π΅Π³ΠΎ измСнСния ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° процСсса Π² состояниС оТидания Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΈ Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΠ΅ элСмСнтарноС дСйствиС, Ρ‚.Π΅. Π² ΡΡ‚ΠΎ врСмя Π½ΠΈ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ этому сСмафору. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ up ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора. Если с этим сСмафором связаны ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΡŽΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ down, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… выбираСтся систСмой ΠΈ разблокируСтся. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° производитСля ΠΈ потрСбитСля Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСмафоров.

Иногда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ упрощСнная вСрсия сСмафора, называСмая ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ. ΠœΡŒΡŽΡ‚Π΅ΠΊΡ – пСрСмСнная, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… состояний: Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для описания ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° трСбуСтсявсСго ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚. ΠœΡŒΡŽΡ‚Π΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π½Π΅Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ рСсурс, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, Π° сСмафор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ рСсурс, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ N ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

НСдостатком сСмафоров являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° малСнькая ошибка ΠΏΡ€ΠΈ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ программистом ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ остановкС всСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ написаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² 1974 Π³ΠΎΠ΄Ρƒ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² синхронизации Π±ΠΎΠ»Π΅Π΅ высокого уровня, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΎΠΌ. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ – Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π² особый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, Π½ΠΎ Ρƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, Π½Π΅Ρ‚ прямого доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ структурам Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρƒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСсс. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡ…ΠΎΠΆ ΠΏΠΎ своСй структурС Π½Π° класс Π² C++. НС всС языки программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹ ΠΈ Π½Π΅ Π²ΠΎ всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Π΅ΡΡ‚ΡŒ ΠΈΡ… встроСнная рСализация. Π’Π°ΠΊ Π² Windows ΠΈΡ… Π½Π΅Ρ‚.

ВсС описанныС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Π½Π΅ подходят для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ Π² распрСдСлСнной систСмС с нСсколькими процСссорами. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ мСТпроцСссного взаимодСйствия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°: send ΠΈ receive, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ скорСС ΡΠ²Π»ΡΡŽΡ‚ΡΡ систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ структурными ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ языка. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запрос посылаСт сообщСниС Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ адрСсату, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ источника. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² систСмах с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.