ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΈ взаимодСйствия процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹, mutex — ΠΎΡ‚ MUTual EXclusion) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌΡƒ рСсурсу. БигнальноС состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Ρ‚.Π΅. состояниС «ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½») соотвСтствуСт ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ «Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ». И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, состояниС «ΡΠ±Ρ€ΠΎΡˆΠ΅Π½» (Π½Π΅ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½ΠΎΠ΅) соотвСтствуСт ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° какая-Π»ΠΈΠ±ΠΎ Π½ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΈ взаимодСйствия процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠœΠžΠ‘ΠšΠžΠ’Π‘ΠšΠ˜Π™ ΠΠ’Π˜ΠΠ¦Π˜ΠžΠΠΠ«Π™ ИНБВИВУВ

(ΠΠΠ¦Π˜ΠžΠΠΠ›Π¬ΠΠ«Π™ Π˜Π‘Π‘Π›Π•Π”ΠžΠ’ΠΠ’Π•Π›Π¬Π‘ΠšΠ˜Π™ Π£ΠΠ˜Π’Π•Π Π‘Π˜Π’Π•Π’) ΠšΠ°Ρ„Π΅Π΄Ρ€Π° 302

АвтоматизированныС систСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ

Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° Ρ‚Π΅ΠΌΡƒ

«ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²»

ΠšΡƒΡ€Ρ: «Π‘истСмы Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ»

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» студСнт Π³Ρ€ΡƒΠΏΠΏΡ‹ 03−423:

Π’Π΅Ρ€Ρ‚ΡƒΡˆΠΊΠΎΠ² А.Π’.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»:

Π‘Π΅ΠΊΡ€Π΅Ρ‚Π°Ρ€Π΅Π² Π’.Π•.

Москва 2013 Π³.

Бинхронизация процСссов Π² ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ порядка исполнСния процСссов называСтся синхронизациСй (synchronization). Бинхронизация процСссов являСтся основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ рСсурсов — с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° синхронизации упорядочиваСтся доступ ΠΊ Ρ€Π΅ΡΡƒΡ€ΡΡƒ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ€Π΅ΡΡƒΡ€ΡΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс освободил Π΅Π³ΠΎ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

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

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

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

Π’ Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ вСроятностныС характСристики Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС (ΠΊΠΎΠ³Π΄Π° программист Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΠ» ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€ ΠΏΠΎ ΠΈΡ… ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ) ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°ΡŽΡ‚ нСзависимо, асинхронно Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ, Π­Ρ‚ΠΎ справСдливо ΠΊΠ°ΠΊ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… процСссов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСт ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π›ΡŽΠ±ΠΎΠ΅ взаимодСйствиС процСссов ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² связано с ΠΈΡ… ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡ… ΡΠΊΠΎΡ€ΠΎΡΡ‚Π΅ΠΉ ΠΏΡƒΡ‚Π΅ΠΌ приостановки ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎ Π½Π°ΡΡ‚уплСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ события ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ наступлСнии этого события. Бинхронизация Π»Π΅ΠΆΠΈΡ‚ Π² ΠΎΡΠ½ΠΎΠ²Π΅ любого взаимодСйствия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², связано Π»ΠΈ это взаимодСйствиС с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ рСсурсов ΠΈΠ»ΠΈ с ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. НапримСр, ΠΏΠΎΡ‚ΠΎΠΊ-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ-ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»Π΅ΠΌ. Если ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ обратился ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΡ… ΠΏΠΎΡΡ‚уплСния Π² Π±ΡƒΡ„Π΅Ρ€, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ приостановлСн. ΠŸΡ€ΠΈ совмСстном использовании Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… рСсурсов синхронизация Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°.

Когда, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ трСбуСтся доступ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ, Π° Ρ ΡΡ‚ΠΈΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ Π² ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, находящийся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΡΠΎΡΡ‚оянии оТидания, Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма (ОБ) приостанавливаСт Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π΅ΠΌΡƒ ΠΏΠΎΡ€Ρ‚ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ся. Часто Π½ΡƒΠΆΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ синхронизация с ΡΠΎΠ±Ρ‹Ρ‚иями, внСшними ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш Π‘tΠ³l+Π‘. ЕТСсСкундно Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ происходят сотни событий, связанных с Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ рСсурсов, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ позволяли Π΅ΠΉ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ с ΠΏΡ€ΠΎΠΈΡΡ…одящими Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ событиями.

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

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

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

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Для синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ программист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π‘ ΡΡ‚ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ процСсса ΠΈΠΌΠ΅ΡŽΡ‚ прямой доступ, программист Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ ΠžΠ‘.

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ критичСских Π΄Π°Π½Π½Ρ‹Ρ… ставится Π² ΡΠΎΠΎΡ‚вСтствиС двоичная пСрСмСнная, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΅Π΅ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ‚. Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ доступС ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ, Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ доступС ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ рСсурсам любого Π²ΠΈΠ΄Π°. Если всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ написаны с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… соглашСний, Ρ‚ΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ гарантируСтся. ΠŸΡ€ΠΈ этом ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ Π² Π»ΡŽΠ±ΠΎΠΌ мСстС, Π² Ρ‚ΠΎΠΌ числС Π² ΠΊΡ€ΠΈΡ‚ичСской сСкции.

Однако слСдуСт Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡ всС ΠΆΠ΅ имССтся. НСльзя ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Поясним это. ΠŸΡƒΡΡ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ», Ρ‡Ρ‚ΠΎ рСсурс свободСн, Π½ΠΎ ΡΡ€Π°Π·Ρƒ послС этого, Π½Π΅ ΡƒΡΠΏΠ΅Π² ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² 0, Π±Ρ‹Π» ΠΏΡ€Π΅Ρ€Π²Π°Π½. Π—Π° Π²Ρ€Π΅ΠΌΡ Π΅Π³ΠΎ приостановки Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ занял рСсурс, вошСл Π² ΡΠ²ΠΎΡŽ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π» ΠΏΡ€Π΅Ρ€Π²Π°Π½, Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡ‹ΠΌ рСсурсом. Когда ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΎΠ½, считая рСсурс свободным, установил ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ занятости ΠΈ Π½Π°Ρ‡Π°Π» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ свою ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±Ρ‹Π» Π½Π°Ρ€ΡƒΡˆΠ΅Π½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ послСдствиям. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… ситуаций Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² прСдусмотрСна Сдиная, нСдСлимая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ значСния логичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π’Π’Π‘, Π’Π’Πš ΠΈ Π’Π’5 процСссора Π Π΅ntium). ΠŸΡ€ΠΈ отсутствии Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ систСмными ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ (ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² — базовая функция ОБ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π»ΠΈ прСрывания Π½Π° ΠΏΡ€ΠΎΡ‚яТСнии всСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ. РСализация Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ описанным Π²Ρ‹ΡˆΠ΅ способом ΠΈΠΌΠ΅Π΅Ρ‚ сущСствСнный нСдостаток: Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ находится Π² ΠΊΡ€ΠΈΡ‚ичСской сСкции, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ трСбуСтся Ρ‚ΠΎΡ‚ ΠΆΠ΅ рСсурс, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² доступ ΠΊ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρƒ, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, бСсполСзно тратя выдСляСмоС Π΅ΠΌΡƒ процСссорноС врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ использовано для выполнСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Для устранСния этого нСдостатка Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠžΠ‘ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΡ€ΠΈΡ‚ичСскими сСкциями.

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹ (semaphore) — это основной ΠΌΠ΅Ρ‚ΠΎΠ΄ синхронизации. Он, Π² ΡΡƒΡ‰Π½ΠΎΡΡ‚ΠΈ, являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ синхронизации процСссов. Π’ ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ сСмафор прСдставляСт собой Ρ†Π΅Π»ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ большС нуля, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ просто счСтчик. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ сСмафор инициализируСтся Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 0 ΠΈΠ»ΠΈ 1. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ лишь значСния 0 ΠΈ 1, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Над сСмафорами ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ — signal ΠΈ wait. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ signal ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора Π½Π° 1, Π° Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ Π΅Π΅ ΠΏΡ€ΠΎΡ†Π΅ΡΡ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ wait ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния сСмафора. Если Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС 0, ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1, ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡ, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ wait, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ. Если сСмафор ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡ, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ wait, приостанавливаСтся (ставится Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊ ΡΠ΅ΠΌΠ°Ρ„ΠΎΡ€Ρƒ) Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ сСмафора Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ся Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ signal. Волько послС этого опСрация wait приостановлСнного процСсса Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ (с ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ значСния сСмафора), Π° ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ процСсс продолТаСтся. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ значСния сСмафора Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈwait Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ шаг. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ wait ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ значСния.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ wait для сСмафора ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠ½ΡΡ‚рукция test_and_set. Если нСсколько процСссов ΠΆΠ΄ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ сСмафора, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ signal Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ своС Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ процСссы ΠΌΠΎΠ³ΡƒΡ‚ ΠΆΠ΄Π°Ρ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, упорядочСнной Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ FIFO (Firstln, FirstOut — ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ вошСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»), Π»ΠΈΠ±ΠΎ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ, ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Названия ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ структуры «ΡΠ΅ΠΌΠ°Ρ„ΠΎΡ€» ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ signal ΠΈ wait ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ мнСмоничСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ вмСсто signal ΠΈ wait ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ названия с Ρ‚Π΅ΠΌ ΠΆΠ΅ самым Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ смыслом. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСмафоров ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ рСсурсов Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

program sem_example (* Π·Π°Ρ‰ΠΈΡ‚Π° рСсурса *) var P1: semaphore begin P1 := 1; cobegin while true do (* бСсконСчный Ρ†ΠΈΠΊΠ» *) begin (* процСсс, А *) wait(P1); (* Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ рСсурс *) signal(P1); … end; (* процСсс, А *) while true do (* бСсконСчный Ρ†ΠΈΠΊΠ» *) begin (* процСсс Π’ *) wait(Pl); (* Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ рСсурс *) signal (Pl); … end; (* процСсс Π’ *) coend; end. (* sem_example *) Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π° процСсса ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ рСсурсу Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

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

Π‘Π°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ сСмафоров Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ прСдотвращСния Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… ситуаций. Если Π΄Π²Π° процСсса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ сСмафоры ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ wait(Pl) wait(P2) wait(P2) wait(Pl) … … (* Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ рСсурс *) (* Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ рСсурс *) … … signal(Pl) signal (P2) signal(P2) signal(Pl) Ρ‚ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ сущСствуСт риск возникновСния Ρ‚ΡƒΠΏΠΈΠΊΠ°. Если ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ процСссов происходит ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ wait ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π²Ρ‚орая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ свои ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ wait, Ρ‚ΠΎ ΡΡ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΡƒΠΏΠΈΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ каТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ освобоТдСния сСмафора.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, хотя сСмафор Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅Ρ€Π°Π·Ρ€Ρ‹Π²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ значСния, ΠΎΠ½ ΡΠ°ΠΌ остаСтся Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΌ рСсурсом. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ явно Π½Π°Ρ€ΡƒΡˆΠ΅Π½ Π·Π°ΠΏΡ€Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выдСлСния, ΠΈ ΡΡ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΡƒΠΏΠΈΠΊΠΎΠ²Ρ‹Ρ… ситуаций. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΡ€ΠΈ синхронизации взаимосвязанных дСйствий. НапримСр, Ссли процСсс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ считаны с Π²Π½Π΅ΡˆΠ½Π΅Π³ΠΎ ΠΏΠΎΡ€Ρ‚Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄: Process «Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…» Process «ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…» while true do while true do begin begin (* Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… *) wait(data_available); signal(data_available); (*ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… *) end; end; Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ отдСляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. На ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ 0. Если сущСствуСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ хранСния) Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ быстрСС, Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π² ΡΠΎΡΡ‚оянии ΠΈΡ… ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ. Π’ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ принято ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ быстрой Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… с Π²Π½Π΅ΡˆΠ½Π΅Π³ΠΎ ΠΏΠΎΡ€Ρ‚Π°, ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов.

Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ критичСских сСкций, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСсс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ сСмафоры, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ mutex (ΠΎΡ‚ mutual exclusion — Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅).

Π’ ΡΡ‚ΠΎΠΌ случаС нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ сСмафоры, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 1 ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ€Π΅ΡΡƒΡ€ΡΡƒ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ значСния сСмафора. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ signal Π½Π°Π΄ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ сСмафором всСгда устанавливаСт Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² 1. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ wait ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с 1 Π΄ΠΎ 0 ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ процСссу ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ дальшС. Если сСмафор ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ†Π΅ΡΡ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ wait, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ся.

Ошибки синхронизации, связанныС с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ использованиСм сСмафоров, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ, Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽwait, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ΅ΠΊΡ†ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. ЕстСствСнно, нСльзя Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ такая ошибка выявится ΠΏΡ€ΠΈ тСстировании; ΠΎΠ½Π° Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π·Π° Π²ΡΠ΅ врСмя сущСствования систСмы. Π›Π΅Π³Ρ‡Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ — ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ опСрация signal ΠΌΠΎΠΆΠ΅Ρ‚ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ привСсти ΠΊ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΠ², Ρ‡Ρ‚ΠΎ достаточно просто ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ возмоТности ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ сСмафоры, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, согласованы Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ wait с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΠΌΠΈsignal Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ‹ Π»ΠΈ сСмафоры с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ рСсурсами, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это зависит ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ сСмафоров Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ. Π—Π°Π±ΠΎΡ‚Π° ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π΅. ИспользованиС структурного программирования сущСствСнно ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой Π·Π°Π΄Π°Ρ‡ΠΈ.

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

begin wait until condition; modify data; end ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° дСлится Π½Π° Π΄Π²Π΅ основныС части. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ условия, Π° Π·Π°Ρ‚Π΅ΠΌ производятся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ доступа.

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

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° новая пСрСмСнная синхронизации event (событиС), с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ связаны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ await (ΠΆΠ΄Π°Ρ‚ΡŒ) ΠΈ cause(Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ). ΠŸΡ€ΠΎΡ†Π΅ΡΡ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²ΡˆΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ await (event), остаСтся Π² ΡΠΎΡΡ‚оянии оТидания, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ event Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ся. Π­Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ контролируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ cause. ΠŸΡ€ΠΈ наступлСнии события, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ cause (event), ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ всС ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ процСссы, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ Π² ΡΠ»ΡƒΡ‡Π°Π΅ сСмафора освобоТдаСтся лишь ΠΎΠ΄ΠΈΠ½ процСсс.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΡΠΎΠ±Ρ‹Ρ‚иями ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ счСтчика, ΠΏΡ€ΠΈ этом основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ. Π“Π»Π°Π³ΠΎΠ» to await ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «ΠΆΠ΄Π°Ρ‚ΡŒ», Π½ΠΎ ΠΈ «ΠΏΡ€Π΅Π΄ΡΡ‚ΠΎΡΡ‚ΡŒ», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ await (А) ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ «ΠΏΡ€Π΅Π΄ΡΡ‚ΠΎΠΈΡ‚ событиС А». Π“Π»Π°Π³ΠΎΠ» to cause ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ», ΠΏΠΎΠ±ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΎΡ‚ΠΈΠ²ΠΎΠΌ, «Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ». ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ cause (А) интСрпрСтируСтся ΠΊΠ°ΠΊ «Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ событиС А» (Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ названия).

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сСмафору, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ события нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ рСсурса ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ доступа Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΎΠ½Π° освобоТдаСт всС ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ процСссы. Π’Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ события ΠΈ ΡΠ΅ΠΌΠ°Ρ„ΠΎΡ€Π°, Ссли всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄ var mutex: semaphore; change: event; begin while not condition do await(change); wait(mutex); (* ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… *) signal(mutex); cause(change); end; ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ event всС процСссы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ condition, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΠ· Π½ΠΈΡ…, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… condition Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ.

Доступ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ рСсурсу Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСмафора mutex, ΠΏΡ€ΠΈ этом продолТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСсс. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ основанноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡΠ΅ΠΌΠ°Ρ„ΠΎΡ€Π°Ρ…. Оно Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ эффСктивно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ процСссы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ условия Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° это ΠΈΠΌΠ΅Π΅Ρ‚ смысл, Ρ‚. Π΅. послС измСнСния значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’Π°ΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ события Π² ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ связан с Π²Π½Π΅ΡˆΠ½ΠΈΠΌΠΈ прСрываниями. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ — ΠΆΠ΄Π΅Ρ‚ прСрывания. Когда ΠΎΠ½ΠΎ происходит, исполнСниС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° возобновляСтся.

Π’Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹, mutex — ΠΎΡ‚ MUTual EXclusion) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌΡƒ рСсурсу. БигнальноС состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Ρ‚.Π΅. состояниС «ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½») соотвСтствуСт ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ «Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ». И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, состояниС «ΡΠ±Ρ€ΠΎΡˆΠ΅Π½» (Π½Π΅ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½ΠΎΠ΅) соотвСтствуСт ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° какая-Π»ΠΈΠ±ΠΎ Π½ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Доступ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‚ΡŒ, Π²Π»Π°Π΄Π΅ΡŽΡ‰Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, освободит Π΅Π³ΠΎ. синхронизация ΠΏΠΎΡ‚ΠΎΠΊ процСсс сСмафор Π”Π²Π΅ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) Π½ΠΈΡ‚ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateMutex. ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΈΡ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ создаСт ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ — ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ дСскриптор ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСскольким нитям ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСскриптор ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°, освобоТдая программиста ΠΎΡ‚ Π½Π΅ΠΎΠ±Ρ…одимости Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΡ‚ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ создаСт ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ bInitialOwner Π² FALSE, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ трудности ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ создатСля ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°. НСсколько Π½ΠΈΡ‚Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСскриптор ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

Β· Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс, созданный ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateProcess ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дСскриптор ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° Π² ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΏΡ€ΠΈ создании ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ CreateMutex Π±Ρ‹Π» ΡƒΠΊΠ°Π·Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lpMutexAttributes.

Β· ΠΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DuplicateHandle.

Β· ΠΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenMutex ΠΈΠ»ΠΈ CreateMutex.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π½ΠΈΡ‚ΠΈ, Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠΠΈΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ «Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Ρ€Π°Π· (это Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡΠ°ΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅), Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Ρ€Π°Π· ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReleaseMutex.

Для синхронизации Π½ΠΈΡ‚Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π±ΠΎΠ»Π΅Π΅ эффСктивно использованиС критичСских сСкций.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Бинхронизация Π½ΠΈΡ‚Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ².

#include

#include

HANDLE hMutex;

int a[5];

HANDLE hThr;

unsigned long uThrID;

void Thread (void* pParams)

{

int i, num = 0;

while (1)

{

WaitForSingleObject (hMutex, INFINITE);

for (i=0; i<5; i++) a[i] = num;

num++;

ReleaseMutex (hMutex);

}

}

int main (void)

{

hMutex=CreateMutex (NULL, FALSE, NULL);

hThr=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE)Thread, NULL, 0,&uThrID);

while (1)

{

WaitForSingleObject (hMutex, INFINITE);

printf («%d %d %d %d %dn», a[0], a[1], a[2], a[3], a[4]);

ReleaseMutex (hMutex);

}

return 0;

}

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