ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Win32 ΠΠ I, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΠ»Ρ Π²ΡΠ΅Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ²) ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ ΡΠΎΡΡΠΎΡΠ»Π°ΡΡ Π»ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π‘ΠΠΠΠ€ΠΠ Π«
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΡΠ°Π»ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠΈΡΠ°Π» ΠΠ΅ΠΉΠΊΡΡΡΠ° (Dijkstra) Π² 1965 Π³ΠΎΠ΄Ρ. ΠΠ½ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅Π»ΡΠ΅ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ².
Π‘Π΅ΠΌΠ°ΡΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΠ°. ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠ°Π²Π° Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ (ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ), ΡΡΠ΅ΡΡΠΈΠΊ Π² ΡΠ΅ΠΌΠ°ΡΠΎΡΠ΅ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. Π Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ ΡΡΡΡΠΏΠ°Π΅Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠ°Π²Π° Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΡΡΠ΅ΡΡΠΈΠΊ Π² ΡΠ΅ΠΌΠ°ΡΠΎΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅ΡΡΠΈΠΊ Π² ΡΠ΅ΠΌΠ°ΡΠΎΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π½ΡΠ»Ρ, ΡΠ΅ΠΌΠ°ΡΠΎΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π² Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄ΡΡΡΡ Π΄Π²Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΠΌΡΡ Π (ΠΎΡ Π΄Π°ΡΡΠΊΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° proberen — ΠΏΡΠΎΠ²Π΅ΡΡΡΡ) ΠΈ V (ΠΎΡ verhogen ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ). ΠΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ S ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ. Π’ΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ V (S) ΠΈ P (S) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
P (S): | ΠΠ‘ΠΠ S = 0 Π’Π ΠΏΡΠΎΡΠ΅ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ; ΠΠΠΠ§Π S = S — 1; | |
V (S): | S = S + 1; | |
ΠΡΠ° Π·Π°ΠΏΠΈΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
— ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ P Π½Π°Π΄ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ S ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΎΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ 0, ΡΠΎ ΠΈΠ· S Π²ΡΡΠΈΡΠ°Π΅ΡΡΡ 1.
ΠΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ 0, ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° S Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ 0, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΠ· S Π²ΡΡΠΈΡΠ°Π΅ΡΡΡ 1. Π£ΡΠΏΠ΅ΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ.
— ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ V Π½Π°Π΄ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ S ΠΊ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ 1. ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ S Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ.
ΠΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² V ΠΈ Π Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ.
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠΈΠΏΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ, ΡΡΠ΅Π±ΡΡΡΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ², ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ° producer-consumer (ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡΡΡΡ Π±ΡΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠ» ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· N Π±ΡΡΠ΅ΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ΄Π½Ρ Π·Π°ΠΏΠΈΡΡ.
ΠΠΎΡΠΎΠΊ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ Π² Π±ΡΡΠ΅Ρ, Π° ΠΏΠΎΡΠΎΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ — ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠΎΠΊ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΡΠΎΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π±ΡΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΏΡΠ»Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΡΡΡΡ, Π ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΡΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΡ, Π² Π΄ΡΡΠ³ΠΎΠΉ — Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΠ»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ Π±ΡΡΠ΅ΡΡ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π·Π°Π½ΡΡΡΠΌΠΈ, ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΎΡΠΈΠ², ΠΏΠΎΡΠΎΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ Π±ΡΡΠ΅ΡΡ ΠΏΡΡΡΡ, ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Ρ ΠΎΡΠΈ Π±Ρ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
ΠΠ²Π΅Π΄Π΅ΠΌ Π΄Π²Π° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°: Π΅ — ΡΠΈΡΠ»ΠΎ ΠΏΡΡΡΡΡ Π±ΡΡΠ΅ΡΠΎΠ², ΠΈ f — ΡΠΈΡΠ»ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ², ΠΏΡΠΈΡΠ΅ΠΌ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΅ = N, a f = 0. Π’ΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² Ρ ΠΎΠ±ΡΠΈΠΌ Π±ΡΡΠ΅ΡΠ½ΡΠΌ ΠΏΡΠ»ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (ΡΠΈΡ.1).
ΠΠΎΡΠΎΠΊ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π (Π΅), Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΈΠΌΠ΅ΡΡΡΡ Π»ΠΈ Π² Π±ΡΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠ»Π΅ Π½Π΅Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ Π±ΡΡΠ΅ΡΡ. Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π , Π΅ΡΠ»ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π΅ ΡΠ°Π²Π΅Π½ 0 (Ρ.Π΅. ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅Ρ), ΡΠΎ ΠΏΠΎΡΠΎΠΊ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
ΠΡΠ»ΠΈ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΡΠΎ ΠΎΠ½ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ², Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ Π±ΡΡΠ΅Ρ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π·Π°Π½ΡΡΡΡ Π±ΡΡΠ΅ΡΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ V (f). ΠΠΎΡΠΎΠΊ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ ΡΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΠ΅ΠΉ, ΡΡΠΎ ΠΎΠ½ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡ Ρ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ², Π° ΠΏΠΎΡΠ»Π΅ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ².
Π‘Π΅ΠΌΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΊ WaitForSingleObject () ΠΈΠ»ΠΈ WaitForMultipleObject ().
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Win32 ΠΠ I, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΠ»Ρ Π²ΡΠ΅Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ²) ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ ΡΠΎΡΡΠΎΡΠ»Π°ΡΡ Π»ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠ°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² (ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅), Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½Π΅ ΡΠΎΡΡΠΎΠΈΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΌΠΈΠ½ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π±ΡΠ» Π·Π°Π΄Π°Π½.
ΠΠΎΠ³Π΄Π° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΡΡΠΎΡΠ»Π°ΡΡ, ΠΏΠΎΡΠΎΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ) ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π½ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ).
ΠΠ»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ Win32 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleQbject (), ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
DWORD WaitForSingleObject (HANDLE handle, DWORD timeout);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
handle — ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°;
timeout — Π·Π°Π΄Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ INFINITE ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΠ΅Ρ ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ).
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π€ΡΠ½ΠΊΡΠΈΡ WaitForSingleObject () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: WAIT_OBJECT0 — ΡΠΎΡΡΠΎΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°; WAIT_TIMEOUT — ΠΌΠΈΠ½ΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (Π΅ΡΠ»ΠΈ timeout Π½Π΅ ΡΠ°Π²Π½ΡΠ»ΡΡ INFINITE), Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ».
ΠΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ°Π·Ρ (Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π°Π½Π°Π»ΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ WaitForMultipleObjects ():
DWORD WaitForMultipleObjects (DWORD count, CONST HANDLE handles, BOOL waitall, DWORD timeout);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
count — Π΄Π»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ²;
handles — Π·Π°Π΄Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ INFINITE ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΠ΅Ρ ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ).
waitall — ΡΠ»Π°ΠΆΠΎΠΊ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ;
timeout — Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΊ WaitForSingleObject
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² handles Π΄Π»ΠΈΠ½ΠΎΠΉ count (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΌΠ°ΡΡΠΈΠ²Π° 64 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°). Π Π΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΡΠ»Π°ΠΆΠΊΠ° waitall.
— ΠΡΠ»ΠΈ waitall ΡΠ°Π²Π½ΡΠ΅ΡΡΡ TRUE, Π·Π°Π΄Π°Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ²Π΅ΡΠ½Π΅Ρ WAIT_OBJECT0.
— ΠΡΠ»ΠΈ waitall ΡΠ°Π²Π½ΡΠ΅ΡΡΡ FALSE, Π·Π°Π΄Π°Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ²Π΅ΡΠ½Π΅Ρ WAIT_OBJECT0+i, Π³Π΄Π΅ iΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ handles.
ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π·Π°Π΄Π°ΡΠ°, Π²ΡΠ·Π²Π°Π²ΡΠ°Ρ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject (), Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° ΠΆΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠΌ, ΡΠ°Π±ΠΎΡΠ° Π·Π°Π΄Π°ΡΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ.
Π‘ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊ, Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π΄Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄Π»Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject () ΠΈΠ»ΠΈ WaitForMultipleObject (), ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseSemaphore ().
ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ, ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ, ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π»ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΡΠΊΠ°Π·Π°Π² Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°, ΡΠ°Π²Π½ΠΎΠ΅ ΡΡΠ΅ΠΌ. ΠΡΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ ΡΡΠ΅ΠΌ.
ΠΡΠ»ΠΈ Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π΄Π°Ρ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ WaitForSingleObject () ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ WaitForSingleObject () ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π΄ΠΎ Π½ΡΠ»Ρ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡ Π² Π½Π΅ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠ°Π΄Π°ΡΠ°, Π·Π°ΠΏΡΡΠ΅Π½Π½Π°Ρ ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΉ, Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject () Π΄Π»Ρ Π½Π΅ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅, Π·Π°Π΄Π°ΡΠΈ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°.
ΠΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ ΠΏΡΠΎΠ΄Π»ΠΈΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅?
ΠΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΡΡΠ΅Ρ Π·Π°Π΄Π°Ρ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ² Π΅Π³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseSemaphore (). Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΎΠ΄Π½Π° ΠΈΠ· Π·Π°Π΄Π°Ρ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Π½Π°Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Windows, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌΠΈ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ CreateSemaphore (), ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
HANDLE CreateSemaphore (LPSECURITY_ATTRIBUTES lpThreadSecurity, LONG lSemInitialCount, LONG lSemMaxCount, LPCTSTR lpszSemName)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
lpThreadSecurity — ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ. ΠΡΠ»ΠΈ Π°ΡΡΠΈΠ±ΡΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ NULL;
lSemInitialCount — Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π² ΡΠ΅ΠΌΠ°ΡΠΎΡΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ Π»ΠΈΠ±ΠΎ ΡΠ°Π²Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° lSemMaxCount;
lSemMaxCount — ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π² ΡΠ΅ΠΌΠ°ΡΠΎΡΠ΅. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ;
lpszSemNameΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠΌΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°;
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Ρ ΡΠ½Π΄Π» ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ NULL.
ΠΠ»Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ CloseHandle (). ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΈΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΡΠ»ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π΄Π°Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΡΠΊΠ°Π·Π°Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° lpszSemName ΡΡΠ½ΠΊΡΠΈΠΈ CreateSemaphore () Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL.
Π ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠΌΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateSemaphore, Π° Π²ΡΠΎΡΠΎΠΉ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ, ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ OpenSemaphore (), ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ
HANDLE OpenSemaphore (DWORD dwAccessFlag, BOOL bInherit, LPCTSTR lpszSemName)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
dwAccessFlag — ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ;
bInherit — ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CreateProcess ();
lpszSemNameΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠΌΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Ρ ΡΠ½Π΄Π» ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ NULL.
Π€Π»Π°Π³ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | |
SEMAPHORE_ALL_ACCESS | Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡΠ»Π°Π³ΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° | |
SEMAPHORE_MODIFY_STATE | Π Π°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΡΡΡΡΠΎΠ² Π² ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseSemaphore () | |
SYNCHONIZE | Π Π°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° | |
ΠΠ»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ReleaseSemaphore (), ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ
BOOL ReleaseSemaphore (HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviosCount)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
hSemaphore — Ρ ΡΠ½Π΄Π» ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°;
lReleaseCount — ΡΠΈΡΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π² ΡΡΠ΅ΡΡΠΈΠΊΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΏΡΠΈ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ;
lpPreviosCount — ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ΅ΡΡΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TRUE, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ NULL.
Π€ΡΠ½ΠΊΡΠΈΡ ReleaseSemaphore () ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π΅ΠΉ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ hSemaphore, Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ lReleaseCount.
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lReleaseCount Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π±ΠΎΠ»ΡΡΠ΅Π΅ Π½ΡΠ»Ρ.
ΠΡΠΈ ΡΡΠΎΠΌ Π΅ΡΠ»ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π²ΡΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΡΡΠ½ΠΊΡΠΈΡ ReleaseSemaphore ()Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°.
ΠΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseSemaphore (), Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠ° LONG. ΠΠ΄ΡΠ΅Ρ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lpPreviousCount.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π²ΡΡ Π·Π°Π΄Π°Ρ:
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΡΠ΅ΡΡΡΡ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ²ΠΎΠΈΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡΠ»ΡΡΠΈΠ·Π°Π΄Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊΠ°, ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, Π³Π»Π°Π²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Π·Π°Π΄Π°Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³Π»Π°Π²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseSemaphore () ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Π·Π°Π΄Π°Ρ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΎ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Windows Π½Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°.
ΠΡΠΎΡ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ WaitForSingleObject () ΠΈΠ»ΠΈ WaitForMultipleObject (). ΠΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π΅Π³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π±ΡΠ΄Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
— ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ CreateSemaphore () ΠΈΠ»ΠΈ OpenSemaphore () ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ;
— ΠΏΠΎΡΠΎΠΊ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject () Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ Π»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΡΠΎΠΊΡ ΡΠ΅ΡΡΡΡ. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ;
— ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ReleaseSemaphore (), ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ReleaseSemaphore () ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π΄ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ, Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π°Π΄ΡΠ΅Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ReleaseSemaphore () ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lplPreviousCount.
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ — Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π΄Π΅Π΄Π»ΠΎΠΊΠΈ, ΠΊΠ»ΠΈΠ½ΡΠΈ, ΡΡΠΏΠΈΠΊΠΈ).