ΠΠ°Π±ΠΎΡ ΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠΎΡΡΠ°Π²Π»ΡΠ»ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠ°ΠΌΡΡΡΡ Π±ΡΠ»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΡΠΎΠ³ΠΈ Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², Π° Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ (ΡΠ΅Π³ΠΈΡΡΡΡ, ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΊΡΡ ΠΈ Ρ.Π΄.).
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠ΄ΡΠΈΠ½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ:
* Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ, Ρ.Π΅. Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ;
* Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ, Ρ.Π΅. ΡΠ»Π΅Π΄ΡΡΡ ΠΎΠ΄Π½ΠΎ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ.
ΠΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ», Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ΄Π½ΠΎΠΉ, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΎΡΠΎΠΊ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΡΠΈΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°. ΠΡΠ±Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π»ΠΈΡΡ Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ°Π±ΠΎΡΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΅Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΡΠΎΠΊΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π½Π°ΠΏΡΡΠΌΡΡ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· Π³Π»Π°Π²Π½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ volatile
ΠΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ volatile. ΠΠ½ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ use Π΄Π»Ρ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Ρ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ load, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ load ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄ use. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ store Π΄Π»Ρ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Π½Π°Π΄ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ assign, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ assign ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ store. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΡΡΠΎΠ³ΠΎ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π΄Π»Ρ ΠΌΠ°Π½Π΅Π²ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π±Π»Π°Π³ΠΎΠΏΡΠΈΡΡΠ½ΡΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π°ΡΠ°Π½Π΅Π΅ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ, Π° Π·Π°ΡΠ΅ΠΌ Π² Π½ΡΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΠΌ.
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΡΠΈΠΏΠ°, double ΠΈ long. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π»ΠΈΡΡ 32-Π±ΠΈΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π²ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π»Ρ Π΄Π²ΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΎΠΊ ΡΠ°ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΡΡΠΈΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ Π½Π°Π΄ ΡΡΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠ»Ρ volatile ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ( lock ), Π½Π°Π΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π΄Π²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ β ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ( lock ) ΠΈ ΡΠ½ΡΡΡ ( unlock ). Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠ»ΠΈ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ unlock, Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΎΡΠΏΡΡΡΠΈΡ Π΅Π΅.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ lock ΠΈ unlock Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΆΠ΅ΡΡΠΊΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ lock ΡΠ°Π±ΠΎΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠΈΡΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ unlock Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΠ»Π°Π³Π°. ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, ΡΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ,β ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ,β ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠΎΠΉ ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ unlock.
Π Java-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ synchronized. ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ β Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ synchronized -Π±Π»ΠΎΠΊΠ° ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π°. Π ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅.
Synchronized -Π±Π»ΠΎΠΊ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
synchronized (ref) {
...
}
ΠΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ Π±Π»ΠΎΠΊΠ΅, ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΡΠ·Π°Π½ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ref (ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ null ). ΠΡΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΄Π°ΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ lock.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΊΠ°ΠΊ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΎΠΊ) ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ unlock, ΡΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
public class ThreadTest implements Runnable {
private static ThreadTest
shared = new ThreadTest();
public void process() {
for (int i=0; i<3; i++) {
System.out.println(
Thread.currentThread().
getName()+" "+i);
Thread.yield();
}
}
public void run() {
shared.process();
}
public static void main(String s[]) {
for (int i=0; i<3; i++) {
new Thread(new ThreadTest(),
"Thread-"+i).start();
}
}
}
Π ΡΡΠΎΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΎΡ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Π» ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ:
Thread-0 0
Thread-1 0
Thread-2 0
Thread-0 1
Thread-2 1
Thread-0 2
Thread-1 1
Thread-2 2
Thread-1 2
Π’ΠΎ Π΅ΡΡΡ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°ΠΊΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² synchronized -Π±Π»ΠΎΠΊ:
public void run() {
synchronized (shared) {
shared.process();
}
}
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½:
Thread-0 0
Thread-0 1
Thread-0 2
Thread-1 0
Thread-1 1
Thread-1 2
Thread-2 0
Thread-2 1
Thread-2 2
Synchronized -ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈΡ , ΠΏΠΎΡΠΎΠΊ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ. Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ synchronized -Π±Π»ΠΎΠΊ, Π° ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ process() ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ static synchronized. ΠΡΠΈ ΠΈΡ Π²ΡΠ·ΠΎΠ²Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Class, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠ΅Π³ΠΎ Π·Π° ΡΠΈΠΏ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ Π²ΡΠ΅Π³Π΄Π° Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ deadlock β Π²Π·Π°ΠΈΠΌΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π» ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΡΡΡ ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΎΡΠΎΠΉ, Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π» Π²ΡΠΎΡΠΎΠΉ ΠΈ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ, ΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΆΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠΉΠ΄ΡΡ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
public class DeadlockDemo {
// ΠΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΡΠ΅ΡΡΡΡΠ°
public final static Object one=new Object(), two=new Object();
public static void main(String s[]) {
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ
// ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ
// one ΠΈ two
Thread t1 = new Thread() {
public void run() {
// ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
synchronized(one) {
Thread.yield();
// ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
synchronized (two) {
System.out.println("Success!");
}
}
}
};
Thread t2 = new Thread() {
public void run() {
// ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
synchronized(two) {
Thread.yield();
// ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
synchronized (one) {
System.out.println("Success!");
}
}
}
};
// ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΈ t1.start();
t2.start();
}
}
ΠΡΠΈΠΌΠ΅Ρ 12.4.
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄Π° yield() Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠ½ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΠΏΠ΅ΡΠ²ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ, Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΠΆΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠ±Π° ΠΏΠΎΡΠΎΠΊΠ° "Π·Π°ΠΌΡΡΡ", Π½Π΅ ΡΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ "ΠΌΠ΅ΡΡΠ²ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ", ΠΈΠ»ΠΈ deadlock. ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΡΠΏΠ΅Π» Π±Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ Π±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π΅ Π΄Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠΎΠΊΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΡΡΠ³ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΡΡΠ³Π°. ΠΠ°Π΄Π΅ΡΠΆΠΊΠΈ (ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΡΡΡΡ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ yield() ) ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΈΠ· Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ), Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π½Π΅ ΡΡΠ°Π·Ρ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡ "ΠΠ"), Π·Π°Π½ΡΡΠΎΡΡΠΈ ΠΠ‘ (ΠΈΠ·-Π·Π° Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ), Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π Java Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ deadlock. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ·Π½Π°ΡΡ, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π»ΠΈ ΡΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠ°ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠΎΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ΡΠ°Π·ΡΠ΅ΡΠΈΠΌΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ (Π²ΡΠ΅Π³Π΄Π° ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠ΅ΡΠ²ΡΠΉ, Π·Π°ΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ) β ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡ Π±Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ.