Π‘Π΅ΠΌΠ°ΡΠΎΡΡ
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Linux ΡΠ΅ΠΌΠ°ΡΠΎΡΡ (semaphore) β ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (wait queue) ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (sleep). ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡΡ[49], ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ½ΠΎΠ²Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌΡΡ ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Π΄Π²Π΅ΡΠΈ ΠΈ ΠΊΠ»ΡΡΠ°. ΠΠΎΠ³Π΄Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠ΅Ρ ΠΎΡΠΊΡΡΡΡ Π΄Π²Π΅ΡΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊ Π΄Π²Π΅ΡΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΊΠ»ΡΡ ΠΈ Π²ΠΎΠΉΡΠΈ Π² ΠΊΠΎΠΌΠ½Π°ΡΡ. ΠΡΠ»ΠΈΡΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΊ Π΄Π²Π΅ΡΠΈ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΈΠΌΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π½Π° Π΄Π²Π΅ΡΠΈ ΠΈ Π»ΠΎΠΆΠΈΡΡΡ ΠΏΠΎΡΠΏΠ°ΡΡ.
ΠΠΎΠ³Π΄Π° ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠΌΠ½Π°ΡΡ, Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· Π½Π΅Π΅, ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π½Π° Π΄Π²Π΅ΡΠΈ. ΠΡΠ»ΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ Π΅ΡΡΡ ΡΡΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ, ΡΠΎ ΠΎΠ½ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΡΠΏΠΈΡΠΊΠ°, Π΄Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ ΠΏΠΈΠ½ΠΊΠ°, Π±ΡΠ΄ΠΈΡ Π΅Π³ΠΎ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΎΠΉΡΠΈ Π² ΠΊΠΎΠΌΠ½Π°ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ»ΡΡ (Ρ.Π΅. ΡΠ΅ΠΌΠ°ΡΠΎΡ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ (Ρ.Π΅. ΠΏΠΎΡΠΎΠΊΡ) Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΊΠΎΠΌΠ½Π°ΡΠ΅ (Ρ.Π΅. Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅) Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ½Π°ΡΠ° Π·Π°Π½ΡΡΠ°, ΡΠΎ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΈΠΌΡ Π² ΡΠΏΠΈΡΠΎΠΊ (Ρ.Π΅. Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ) ΠΈ Π·Π°ΡΡΠΏΠ°Π΅Ρ (Ρ.Π΅. Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅), ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄. Π’Π°ΠΊΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, ΡΠ΅ΠΌ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΡΠ°ΡΠΈΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π² ΡΠΈΠΊΠ»Π΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ², ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ, ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌΠΈ.
ΠΠ· ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
β’ Π’Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ ΠΏΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ Π² ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΆΠ΄ΡΡ, ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π°, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
β’ Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π½Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½Ρ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ Π½Π° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ "ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΡΡ" Π²ΡΠ΅ΠΌΡ, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°.
β’ Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΠΏΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ.
β’ ΠΡΠΈ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° (Ρ ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅ΡΡ ΡΡΠΎΠ³ΠΎ) ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΡΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ).
β’ ΠΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΎΠΆΠΈΠ΄Π°Ρ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π° ΠΏΡΠΈ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠΈ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π½Π΅Π»ΡΠ·Ρ.
ΠΡΠΈ ΡΠ°ΠΊΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π²ΡΠ±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, ΠΏΡΠΎΡΡ. ΠΡΠ»ΠΈ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΠ΅, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π² Π½ΠΈΡ Π½Π΅Ρ ΡΡΡΠΎΠ³ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌΠΈ ΠΈ ΡΠΏΠΈΠ΄-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ, ΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. Π ΠΈΠ΄Π΅Π°Π»Π΅, Π²ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ, ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄Ρ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°ΡΡ ΠΏΡΠ΅Π΅ΠΌΠΏΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ΄ΡΠ°, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠ΅ΡΠ½Π΅Π½. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π²ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ (Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡ) ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°.
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π·Π°Π΄Π°Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ΠΎ ΠΏΡΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (usage count) ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ (count). ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΡΠ°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠΏΠΈΠ½-Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ΅ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌΠΈ (binary semaphore) (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½ΠΈΠΊΠ΅ΠΌ Π½Π΅ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ) ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ (mutex, ΠΌΡΡΡΠ΅ΠΊΡ) (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏ β mutual exclusion). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠ΅ΡΡΠΈΠΊΡ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π±ΠΎΠ»ΡΡΠ΅Π΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΡΠ½ΡΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ (counting semaphore, ΡΠ΅ΠΌΠ°ΡΠΎΡ-ΡΡΠ΅ΡΡΠΈΠΊ), ΠΈ ΠΎΠ½ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π‘Π΅ΠΌΠ°ΡΠΎΡΡ-ΡΡΠ΅ΡΡΠΈΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΡΠ°ΡΡΠΊΠ΅. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π»ΠΈΠΌΠΈΡΠΎΠ² Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π ΡΠ΄ΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ°Π»ΠΎ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (ΡΠ΅ΠΌΠ°ΡΠΎΡ ΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ, ΡΠ°Π²Π½ΡΠΌ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅).
Π‘Π΅ΠΌΠ°ΡΠΎΡΡ Π±ΡΠ»ΠΈ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΠ΄ΡΠ³Π΅ΡΠΎΠΌ ΠΠ°ΠΉΠ±ΠΎΠΌ ΠΠ΅ΠΉΠΊΡΡΡΠΎΠΉ[50] (Edsger Wybe Dijkstra) Π² 1968 Π³ΠΎΠ΄Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. Π‘Π΅ΠΌΠ°ΡΠΎΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π²Π΅ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ P() ΠΈ V(), Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ Π³ΠΎΠ»Π»Π°Π½Π΄ΡΠΊΠΈΡ ΡΠ»ΠΎΠ² Proben (ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ) ΠΈ Verhogen (Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ). ΠΠΎΠ·ΠΆΠ΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°ΡΠ°Π»ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ down() ΠΈ up() ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Linux ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ down() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΡΡΠ΅ΠΌ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ, ΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²Ρ ΠΎΠ΄ΠΈΡΡ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ°ΡΡΠΎΠΊ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ, ΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π³ΠΎΠ²ΠΎΡΡΡ Π² ΡΠΎΡΠΌΠ΅ Π³Π»Π°Π³ΠΎΠ»Π°β ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ (down) Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ. ΠΠ΅ΡΠΎΠ΄ up() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ°. ΠΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ΄Π½ΡΡΠΈΠ΅ΠΌ (upping) ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ°. ΠΡΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π½Π΅ ΠΏΡΡΡΠ°, ΡΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π°Π΄Π°Π½ΠΈΠΉ ΡΡΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ²
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΡΠ°ΠΉΠ»Π΅ <asm/semaphore.h>. Π‘ΡΡΡΠΊΡΡΡΠ° struct semaphore ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡ. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
static DECLARE_SEMAPHORE_GENERIC(name, count);
Π³Π΄Π΅ name β ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, a count β ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠ°Ρ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (mutex), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄.
static DECLARE_MUTEX(name);
Π³Π΄Π΅ name β ΡΡΠΎ ΡΠ½ΠΎΠ²Π° ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ . Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΏΡΡΠΌΠ°Ρ ΡΡΡΠ»ΠΊΠ° ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
sema_init(sem, count);
Π³Π΄Π΅ sem β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, a count β ΡΡΠ΅ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
init_MUTEX(sem);
ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ»ΠΎΠ²ΠΎ "mutex" Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ init_MUTEX() Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π±ΡΠΊΠ²Π°ΠΌΠΈ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ»ΠΎΠ²ΠΎ "init" ΠΈΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ sema_init() ΡΠ°ΠΊΠΈΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΈ Ρ ΠΏΡΠΈΠ½ΠΎΡΡ ΡΠ²ΠΎΠΈ ΠΈΠ·Π²ΠΈΠ½Π΅Π½ΠΈΡ Π·Π° ΡΡΠΎ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ Π³Π»Π°Π²Ρ 7 Π½ΠΈ Ρ ΠΊΠΎΠ³ΠΎ ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΡΠΈΠ΄ΡΠΌΡΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΡΠ΄ΡΠ°.