ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
Π€ΡΠ½ΠΊΡΠΈΡ MsgWaitForMultipleObjects Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ WaitForMultipleObjects. ΠΡΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ Π΅Π΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅Π»ΡΠΊΠΈ ΠΌΡΡΡΡ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² CRITICAL_SECTION
Π ΡΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΡ ΡΡΠΏΠ΅Π»ΠΈ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Windows ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ Π½Π° ΡΡΠ΄Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΡΡΡΠ΅ΠΊΡΡ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ CS ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΌΡ Π΅ΡΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅, ΡΠΎ Π½Π°ΡΡΠΎΡΡΡΡ Π³Π»Π°Π²Ρ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² CS Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½ΠΎ ΠΈΠ½ΠΎΠ΅, Π²ΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ CS.
β’ ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. ΠΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΡΠΎ, ΡΡΠΎΠ±Ρ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠΉ (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ) ΠΌΡΡΡΠ΅ΠΊΡ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ Π±ΡΠ» ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ (ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½), Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°.
β’ ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΊΠΈΠ½Π΅Ρ (ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ) ΠΎΠ±ΡΠ΅ΠΊΡ CS, ΡΠΎ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. Π§ΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π²Π»Π°Π΄Π΅ΡΡΠΈΠΉ ΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½Π΅ ΡΡΡΡΠΏΠΈΠ² ΠΏΡΠ°Π² Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ.
β’ ΠΠ΅ ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ, Π·Π°ΡΠΈΡΠ°Π΅ΠΌΡΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject Π²ΡΠ·Π²Π°Π½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
β’ ΠΠΆΠΈΠ΄Π°ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ° Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΌΡΡΡΠ΅ΠΊΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ, ΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠ°Π²Π° Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΠ‘ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ; ΠΊΠ°ΠΊ ΠΈ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΡΠ°Π²Π° Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π’Π΅ ΠΆΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΡΠΌΠΈ ΠΈ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ; Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ±ΡΡΠΈΡ Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
β’ Π ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΡΠ°ΡΡΠΊΡ ΠΊΠΎΠ΄Π° ΠΎΡΠ½ΠΎΡΡΡΡΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠ°Π²Π° Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΈ ΡΡΡΡΠΏΠ°Π΅Ρ ΠΈΡ . ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΊΠΎΠ² ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΌΡΡΡΠ΅ΠΊΡ. ΠΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ.
β’ ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠ°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΡΠ΅ΠΏΠ΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠ»ΠΈ Π³ΡΠ°Π½ΡΠ»ΡΡΠ½ΠΎΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² (mutex granularity), ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ. Π Π°Π·ΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΊΠΎΠ² ΠΊΠΎΠ΄Π° ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π½Π° Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
β’ Π‘Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅ ΠΌΡΡΡΠ΅ΠΊΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΡΠ΅ΡΡΡΡΠΎΠΌ, Π·Π°ΡΠΈΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ . (ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ 8.1 ΠΈ 8.2.)
β’ ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅, ΠΈΠ»ΠΈ Π±ΡΠ»Π΅Π²ΡΠΊΠΈΠ΅, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ½Π²Π°ΡΠΈΠ°Π½Ρβ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π·Π°ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ Π²Π½Π΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Π²Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΠ΅. Π€ΠΎΡΠΌΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠΉ: "ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ±ΠΎΠΈΠΌ ΡΠΏΠΈΡΠΊΠ°ΠΌ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· Π½ΠΈΡ ", "ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° Π΄Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΠΎΠΉ", "ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ" ΠΈΠ»ΠΈ "0 <= nLost + nCons <= sequence". Π’ΠΎΡΠ½ΠΎ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ ASSERT ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Ρ ΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ASSERT Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°.
β’ Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ Π²ΡΡ ΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ. ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ°ΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΊΠ°ΠΊ break, return ΠΈΠ»ΠΈ goto, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΡ ΠΎΠ΄Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π°. ΠΠ»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΠΊΠΎΠ² ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
β’ ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΠ°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ°Π·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° (ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΠΎΠ΄Π½Ρ ΡΡΡΠ°Π½ΠΈΡΡ), ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΡ Π΅ΠΌΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. Π’Π°ΠΊ, ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ·Π»Π° ΠΈΠ· ΡΠ±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΏΠΎΠΈΡΠΊΠ°, ΠΏΠΎΠΊΠ° Π΄Π΅ΡΠ΅Π²ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
Π Π°Π½Π΅Π΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ InterlockedIncrement ΠΈ InterlockedDecrement ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ β ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ; ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄.
Π€ΡΠ½ΠΊΡΠΈΡ InterlockedExchange ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π΄ΡΡΠ³ΠΎΠΉ.
LONG InterlockedExchange(LPLONG Target, LONG Value)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Target, ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π²Π½ΡΠΌ Value. Π€ΡΠ½ΠΊΡΠΈΡ InterlockedExchangeAdd ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅Ρ Π²ΡΠΎΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ.
LONG InterlockedExchangeAdd(PLONG Addend, LONG Increment)
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Increment ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Addend, Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° 2 (ΠΈ Π±ΠΎΠ»Π΅Π΅) Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ InterlockedIncrement.
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ InterlockedCompareExchange, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ InterlockedExchange, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±ΠΌΠ΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π²Π΅Π½ΡΡΠ²Π° ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
PVOID InterlockedCompareExchange(PVOID *Destination, PVOID Exchange, PVOID Comparand)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ PVOID Π΄Π»Ρ Π΄Π²ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°Π·Π°ΡΡΡΡ Π²Π°ΠΌ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ):
Temp = *Destination;
if (*Destination == Comparand) *Destination = Exchange;
return Temp;
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ Ρ ΡΠ΅Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π°. *Destination ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (lock variable), ΠΏΡΠΈΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ 0 β Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Exchange Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ 0, a Comparand β 1. ΠΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΎΠ½Π° Π²Π»Π°Π΄Π΅Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΠ°ΡΡΠΊΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 1. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ "ΡΡΠ½ΡΡΡ", ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π·Π°Π½ΡΡΠΎΡΡΠΈ ("spin"), ΡΠΎ Π΅ΡΡΡ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΈΠΊΠ», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ, Ρ ΡΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠΆΠ΄Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²Π½ΠΎΠ²Ρ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΠΏΠΎΠΏΡΡΠΊΡ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΊΠ» ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ EnterCriticalSection, ΠΎΠΆΠΈΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° CRITICAL_SECTION Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠΈΠ½-ΡΡΠ΅ΡΡΠΈΠΊΠ°; Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ Π³Π»Π°Π²Π΅ 9.
Π£ΡΠ΅Ρ ΡΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΏΠ°ΠΌΡΡΡΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 9.1, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠΎΡΠ΅Π²Π½ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ Π·Π° ΠΏΡΠ°Π²ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΡΡΡ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ malloc ΠΈ free ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ CRITICAL_SECTION Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΊΡΡΠΈ (Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΌΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘). ΠΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.