Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ½ΠΎΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ
Race condition ΠΈ D ata Race
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ΅ΡΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅, concurrency ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΡΡΠΊΠ°Ρ .
Race condition ΠΈ data race β Π΄Π²Π΅ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ ΠΏΡΡΠ°ΡΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
Race condition
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²ΠΎΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ:
Race condition ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄Π²ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ.
Race condition β ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π°.
Race condition β ΡΡΠΎ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΏΡΠΈΡΠΎΠ΄Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Race condition β ΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎ ΠΌΠ½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ ΠΈ ΠΏΡΠΎΡΡΠΎΠ΅:
Race condition β ΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ Π²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΠΆΠ½ΠΎ, ΡΡΠΎ Race condition β ΡΡΠΎ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°.
Π ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΡΡ Π΅ΠΌ Π΅ΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°:
Π‘ΠΎΡΡΡΠ·Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² β ΡΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠΈΡΡΠΎΠ²ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ Π°ΠΏΠΏΠ°ΡΠ°ΡΡΡΠ΅.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½:
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅:
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½. ΠΡΠΎ ΡΠΈΠΏΠΈΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° race condition. Π‘ΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅ΠΉ ΠΈ Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π΅ΠΉ.
Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ race condition ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, Π½Π΅Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠΎΠΌΠΎΡΡ ΠΌΠΎΠ³ΡΡ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅ΡΠ½ΡΠ΅ ΠΈ Π½Π΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°, Π° ΡΠ°ΡΡΠΈΡΡΠ²Π°Π»ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ½ΡΠ΅.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΎΠ±ΡΠΈΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠ΅ΡΠ°ΡΡΡΡ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ:
ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ:
Data Race
Data race ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ.
ΠΡΠΈΠΌΠ΅Ρ Ρ Π±Π°Π»Π°Π½ΡΠΎΠΌ Π½Π° ΡΡΠ΅ΡΡ:
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² ΡΠ°Π·Π½ΡΡ Π³ΠΎΡΡΡΠΈΠ½Π°Ρ :
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±Π°Π»Π°Π½Ρ ΡΠ°Π²Π΅Π½ 0, Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠΈΠΌ 1000 ΡΠ°Π· ΠΏΠΎ 1. ΠΠΆΠΈΠ΄Π°Π΅ΠΌ Π±Π°Π»Π°Π½Ρ ΡΠ°Π²Π½ΡΠΉ 1000, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄ΡΡΠ³ΠΎΠΉ:
ΠΠΎΡΠ΅ΡΡΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π½Π΅Π³.
ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ acc.balance += amount Π½Π΅ Π°ΡΠΎΠΌΠ°ΡΠ½Π°Ρ. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡΡΡ Π½Π° 3:
ΠΠΎΠΊΠ° ΠΌΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π² Π΄ΡΡΠ³ΠΈΡ ΡΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ balance. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅ΡΡΠ΅ΡΡΡ ΡΠ°ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ 2 ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ±Π°Π²ΠΈΡΡ ΠΊ Π±Π°Π»Π°Π½ΡΡ ΠΏΠΎ 1:
ΠΠΆΠΈΠ΄Π°Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π°Π»Π°Π½Ρ=102, Π° ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ = 101.
Π£ Data Race Π΅ΡΡΡ ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠ΅ΠΉ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠΎΠ² Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½ΡΡ (ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅/Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π³ΠΈΠ±ΡΠΈΠ΄Π½ΠΎΠ³ΠΎ data race).
Π£ Go Π΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΉ Data Race Detector Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ.
Π Π΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ:
Race Condition ΠΈ Data Race
Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΠ΅Π΄ΡΡΠ² Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ° Π½Π° Π΄ΡΡΠ³ΠΎΠΉ:
ΠΠ° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ΅ΡΡ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ 1000, Π° Π½Π° Π΄ΡΡΠ³ΠΎΠΌ 0. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ 1 Π² 1000 Π³ΠΎΡΡΡΠΈΠ½Π°Ρ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ Π²ΡΠ΅ Π΄Π΅Π½ΡΠ³ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ:
ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ:
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΈΠΊΠ» Π½Π° Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅ΠΉ:
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π±Π΅Π· Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠ°ΠΊ dara race (Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π±Π°Π»Π°Π½Ρ ΡΡΠ΅ΡΠ°), ΡΠ°ΠΊ ΠΈ race condition (Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π΅Π½Π΅Π³).
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ. ΠΠ±ΡΠ°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΠ°ΠΊΠΎΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΠΈ Π² ΠΈΡΠΎΠ³Π΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ:
Π£ Π½Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ Π²ΡΠ΅ ΡΡΠ°ΡΡΠΊΠΈ Ρ Π·Π°ΠΏΠΈΡΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠΏΠΈΡ, Race Detector Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ³Π°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠ΄. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ 1000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠΎ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π³ΠΎΡΡΡΠΈΠ½ Π±ΡΠ΄Π΅Ρ 10ΠΊ:
ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ data race, Π½ΠΎ race condition ΠΎΡΡΠ°Π»ΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΠ΅Π΄ΡΡΠ², Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Π Π΅ΡΠΈΠ² Data Race ΡΠ΅ΡΠ΅Π· ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ) Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΅ΡΠ°Π΅ΡΡΡ race condition ΠΈ logical correctness.
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΠΊ race condition
ΠΡΠ»ΠΈ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π²Π°Π»ΡΡΠΎΠΉ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΡΠΈΠΏΠ° race condition (Β«ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈΒ» ΠΈΠ»ΠΈ, Π΅ΡΠ»ΠΈ ΡΠΎΡΠ½Π΅Π΅, β Β«Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°Β»). Race condition β ΡΡΠΎ Β«ΠΏΠ»Π°Π²Π°ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°Β», ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΈ. Π‘ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π²Π°Π»ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Ρ ΠΈ, ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, Π½Π°Π½Π΅ΡΡΠΈ ΠΎΡΡΡΠΈΠΌΡΠΉ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠΉ ΡΡΠ΅ΡΠ± Π²Π»Π°Π΄Π΅Π»ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ Π΅Π΅ ΡΠ΅ΡΠΈΡΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ race condition
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΡΡΠΎ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ΅ΡΡΠΈΡΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΡΠΈΠΏΠ° race condition, Ρ ΠΎΡΡ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π°.
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π±ΡΠΊΡΠ½Π΄Π° ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ: Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΡΡΡ: ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π°ΠΌ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ .
ΠΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ Π±ΠΎΠ½ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΡΠΌΠΈ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°ΠΌΠΈ. Π£ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠ° Π΅ΡΡΡ Π΄Π²Π° ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° β A ΠΈ B, ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ Π΅ΡΡΡ 1000 Π±ΠΎΠ½ΡΡΠΎΠ². ΠΠ° ΡΡ Π΅ΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΡΡΠΌΠΌΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π½Π° ΡΠ²ΠΎΠΉ ΡΡΠ΅Ρ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ· 10 Π±ΠΎΠ½ΡΡΠΎΠ² β 20.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΠΊΠΈΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, RacePWN ΠΊΠΎΡΠΎΡΡΠΉ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ HTTP-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ json-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΎΠ±Π»Π΅Π³ΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π°ΡΠ°ΠΊΠΈ Π΄Π»Ρ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ². ΠΡΡΡΠ½ΡΡ ΠΆΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ POST-Π·Π°ΠΏΡΠΎΡΠΎΠ².
Π‘ΠΌΠ΅ΡΡΠ΅Π»ΡΠ½Π°Ρ race condition
Π Π‘Π¨Π Ρ ΠΈΡΠ½Ρ 1985 Π³ΠΎΠ΄Π° ΠΏΠΎ ΡΠ½Π²Π°ΡΡ 1987 Π³ΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΊΠ° race condition Π² Π°ΠΏΠΏΠ°ΡΠ°ΡΠ΅ Π»ΡΡΠ΅Π²ΠΎΠΉ ΡΠ΅ΡΠ°ΠΏΠΈΠΈ Therac-25, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ°Π½Π°Π΄ΡΠΊΠΎΠΉ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Atomic Energy of Canada Limited (AECL) ΡΡΠ°Π»Π° ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠ΅ΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ΠΎΠ·ΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ°Π΄ΠΈΠ°ΡΠΈΠ΅ΠΉ. ΠΠ΅ΡΡΠ²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π΄ΠΎΠ·Ρ Π² Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ ΡΠ°Π΄. Π‘ΠΌΠ΅ΡΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π² 1000 ΡΠ°Π΄. ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΎΠΆΠΎΠ³ΠΎΠ² ΠΏΠΎΡΡΡΠ°Π΄Π°Π²ΡΠΈΠ΅ ΡΠΌΠ΅ΡΠ»ΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π½Π΅Π΄Π΅Π»Ρ. ΠΡΠΆΠΈΡΡ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠΊΠ΅.
ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Therac ΠΈΠΌΠ΅Π»ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π·Π°ΡΠΈΡΡ: Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ΅ΠΏΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π»ΡΡ; ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡΡ; Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΠΊΠ»ΡΡΠ°ΡΠ΅Π»ΠΈ; ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅Π»ΠΈ. Π Therac-25 Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ Π·Π°ΡΠΈΡΡ ΡΠ±ΡΠ°Π»ΠΈ. ΠΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΡΠ²Π΅ΡΠ°Π»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΏΠΏΠ°ΡΠ°Ρ ΠΈΠΌΠ΅Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ°Π±ΠΎΡΡ, ΠΈ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ race condition Π²ΡΠ°Ρ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π°ΠΏΠΏΠ°ΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅. Π Ρ ΠΎΠ΄Π΅ ΡΡΠ΄Π΅Π±Π½ΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅Π»ΡΡΡΠ² Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ ΠΠ Therac-25 Π±ΡΠ»ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ, Π½ΠΎ Ρ AECL Π½Π΅ Π±ΡΠ»ΠΎ Π΄Π°Π½Π½ΡΡ , ΠΊΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ.
ΠΠΎ ΠΈΡΠΎΠ³Π°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠ°Π²ΠΈΡΠ΅Π»ΡΡΡΠ²ΠΎ Π‘Π¨Π ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΡΠΆΠ΅ΡΡΠΎΡΠΈΠ»ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΈΡΡΠ΅ΠΌ, ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΊΡΠΈΡΠΈΡΠ½Π° Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ.
ΠΠ°ΠΊ Π·Π°ΡΠΈΡΠΈΡΡΡΡ
ΠΡΠΎΡΠ΅ ΠΈ Π΄Π΅ΡΠ΅Π²Π»Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ race condition β ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡ ΡΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ.
ΠΠ°ΠΊ ΠΌΡ Π½Π°ΡΠ»ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ
ΠΠ°Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ β ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΊΠΈΠ΄ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΡΠΏΠΎΠ½ΠΎΠ². Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ β ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ POST-Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΡΠΏΠΎΠ½Π°. ΠΡΠΏΡΠ°Π²Π»ΡΡ Π·Π°ΠΏΡΠΎΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌΠΈ, ΡΠ΄Π°Π²Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠΈΠ΄ΠΊΡ Π΄Π²Π°ΠΆΠ΄Ρ. Π‘ΡΠ΄Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠ»ΠΈ Π³ΡΡΠ±ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π»ΡΠ»ΡΡ Ρ ΠΏΠΎΠΊΡΠΏΠΊΠΎΠΉ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Race condition Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ. ΠΡΡΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΈ ΡΠ΅ΡΡΡΡΡ Π½Π° ΠΏΠΎΠΈΡΠΊ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄Π»Ρ Π±ΡΠ΄ΠΆΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.
20.5. Π‘ΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ½ΠΎΠΊ
20.5. Π‘ΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ½ΠΎΠΊ
Π‘ΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ½ΠΎΠΊ (race condition) ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌ, Π½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² ΡΠΈΠΏΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Unix Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΊ Π·Π°ΠΏΡΡΠΊΡ, ΠΈΠ½ΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½, Π° ΠΈΠ½ΠΎΠ³Π΄Π° β Π½Π΅Ρ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠΈΠΏΠΎΠΌ Π³ΠΎΠ½ΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΡΠ΅Π΄ΠΊΠ°. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π³ΠΎΠ½ΠΎΠΊ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² Π³Π»Π°Π²Π΅ 26, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (mutex) ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (condition variables). ΠΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ Π³ΠΎΠ½ΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅).
Π‘ΠΈΡΡΠ°ΡΠΈΠΈ Π³ΠΎΠ½ΠΎΠΊ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΈΠ³Π½Π°Π»Π°ΠΌΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ³Π½Π°Π», ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. POSIX ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΡ ΡΠΈΠ³Π½Π°Π»Π°, Π½ΠΎ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΎ ΡΠ°ΡΡΠΎ Π½Π΅ Π΄Π°Π΅Ρ ΡΡΡΠ΅ΠΊΡΠ°.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. Π‘ΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ½ΠΎΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· Π»ΠΈΡΡΠΈΠ½Π³Π° 20.1. ΠΠΎΡΡΠ°ΡΡΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ Π΅Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ. (ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ³Π½Π°Π»?) ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ½ΠΎΠΊ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ alarm Ρ 5 Π½Π° 1 ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΠ·ΠΎΠ² sleep(1) ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ printf.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π°Π±Π΅ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π²Π²ΠΎΠ΄Π°, ΡΡΠ° ΡΡΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠ°ΠΊ ΡΠΈΡΠΎΠΊΠΎΠ²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π° ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ alarm ΡΠ°Π²Π½ΡΠΌ 1 Ρ. ΠΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ²Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ recvfrom, Π½ΠΎ Π·Π°ΡΠ΅ΠΌ ΠΌΡ Π²Ρ ΠΎΠ΄ΠΈΠΌ Π² ΡΠΏΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΈΠ΅ΠΌΠ½ΡΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ°. ΠΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π² ΡΠΏΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° alarm ΠΈΡΡΠ΅ΠΊΠ°Π΅Ρ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΈΠ³Π½Π°Π» SIGALRM. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π°, Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ sleep, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΡΠΈΠΊΠ» ΠΈ ΡΠΈΡΠ°Π΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΡΠ²Π΅ΡΡ Ρ ΠΏΠ°ΡΠ·ΠΎΠΉ Π² ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠ²Π΅Ρ. ΠΡΠΎΡΠΈΡΠ°Π² Π²ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ, ΠΌΡ ΡΠ½ΠΎΠ²Π° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠΆΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡ ΠΎΠΊΠ°ΠΆΠ΅ΠΌΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π° Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom. Π€ΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΡΠ° ΡΠ΅Π»Ρ β ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΈΠ³Π½Π°Π»Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠΈΠ³Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΈ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° for.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: ΠΎΠ΄Π½ΠΎ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΈ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Π°
ΠΠ°ΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅ (Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅) ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π±Π»ΠΎΠΊΠΈΡΡΡ ΡΠΈΠ³Π½Π°Π» ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ Π΅Π³ΠΎ Π΄ΠΎΡΡΠ°Π²ΠΊΡ, ΠΏΠΎΠΊΠ° Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΡΡΠ°Π²ΡΡΡΡΡ ΡΠ°ΡΡΡ ΡΠΈΠΊΠ»Π° for. ΠΡΠ° Π²Π΅ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 20.2.
ΠΠΈΡΡΠΈΠ½Π³ 20.2. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π² ΡΠΈΠΊΠ»Π΅ for (Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅)
2 static void recvfrom_alarm(int);
4 dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
8 char sendline[MAXLINE], recvline[MAXLINE + 1];
9 sigset_t sigset_alrm;
11 struct sockaddr *preply_addr;
12 preply_addr = Malloc(servlen);
13 Setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
16 Signal(SIGALRM, recvfrom_alarm);
18 Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
23 n = recvfrom(sockfd, recvline, MAXLINE, 0, preply_addr, &len);
25 if (n ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΠΈΡΠ Π΅Ρ
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅
10.4.5. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΡ Π³ΠΎΠ½ΠΎΠΊ ΠΈ sig_atomic_t (ISO C)
10.4.5. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΡ Π³ΠΎΠ½ΠΎΠΊ ΠΈ sig_atomic_t (ISO C) ΠΠΎΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° Π·Π° ΡΠ°Π· Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΎΡΡΠΎ: ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π° Π² main() ΠΈ (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ) ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΈΠ³Π½Π°Π»Π° (ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ SIG_IGN) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.ΠΠΎ ΡΡΠΎ
Π Π΅Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ
Π Π΅Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π ΠΈΡ. 5.7. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ (Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ³ΠΎ) ΡΠ°ΠΉΡΠ°
Π‘ΠΈΡΡΠ°ΡΠΈΡ 4. ΠΠ²Π°ΡΠΈΡ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ°
Π‘ΠΈΡΡΠ°ΡΠΈΡ 4. ΠΠ²Π°ΡΠΈΡ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π°Π½Π΄ΠΈΡ. Π§ΠΈΠ½ΠΈΡ Π΄ΠΈΡΠΊ. ΠΠ±ΡΡΠ½ΠΎ Π΅ΠΌΡ ΡΠ΄Π°Π΅ΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΌΠΈΠΊΡΠΎΡΠ΄ΡΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π° ΡΠΎΡΠ΅Π΄Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΏΠΈΡΡΡΡΠΈΠΉ Π½Π° Π°Π²Π°ΡΠΈΠΉΠ½ΡΡ
Π‘ΠΈΡΡΠ°ΡΠΈΡ 5. Π‘Π»Π°Π±Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠΈ
Π‘ΠΈΡΡΠ°ΡΠΈΡ 5. Π‘Π»Π°Π±Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠΈ Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π°Π½Π΄ΠΈΡ. ΠΠΈΡΠ΅Ρ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠ΅ΡΠΈ, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° 2%. ΠΠΎΠΆΠΈΠΌΠ°Π΅Ρ ΠΏΠ»Π΅ΡΠ°ΠΌΠΈ, Π³ΠΎΠ²ΠΎΡΠΈΡ: «Π― ΡΠ΄Π΅Π»Π°Π» Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠ³», ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠΎΡ ΠΎΠ΄ Π²
Π‘ΠΈΡΡΠ°ΡΠΈΡ 7. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
Π‘ΠΈΡΡΠ°ΡΠΈΡ 7. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π°Π½Π΄ΠΈΡ. ΠΠ·ΡΡΠ°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΈΠ· Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠ°Π²ΠΈΡΡΡ.ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ-ΡΠ°ΡΠΈΡΡ. Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈΠ·ΡΡΠ°Π΅Ρ Π·Π°ΠΊΠΎΠ½ΠΎΠ΄Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΠΊΡΡ ΠΏΡΠΎΡΠΈΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ
3. ΠΡΠΎΠ±Π»Π΅ΠΌΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π»ΠΈ
3. ΠΡΠΎΠ±Π»Π΅ΠΌΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π»ΠΈ ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ° Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π² ΠΆΠΈΠ·Π½ΠΈ Π±ΡΠ»ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ Π±ΠΎΡΠ»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΡΠΏΡΡΡΠ²Π°Π»ΠΈ Π΄ΠΈΡΠΊΠΎΠΌΡΠΎΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ΅Π½ΠΈΠΈ Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΌ ΠΏΠΎΠ»ΠΎΠΌ, Π½Π° ΡΠ°Π±ΠΎΡΠ΅. Π£ Π²Π°Ρ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π²Ρ ΠΈΡ
ΠΠΈΠ·Π½Π΅Ρ-ΡΠΈΡΡΠ°ΡΠΈΡ 1.2: ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ
ΠΠΈΠ·Π½Π΅Ρ-ΡΠΈΡΡΠ°ΡΠΈΡ 1.2: ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΡΡΠ΄ ΠΠΆΠΎΠ½Ρ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Jones Novelties Incorporated Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ . ΠΠ½ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ²Π΅ΡΠ΅Π½ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΅Π³ΠΎ Π΄Π΅Π»ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΎΠ² Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΌΠΈ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΎΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡ
ΠΠΠΠΠΠΠ«: ΠΠ°ΡΠΎΠ²Π°Ρ ΠΏΠ°ΡΠ΅Π½ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ
ΠΠΠΠΠΠΠ«: ΠΠ°ΡΠΎΠ²Π°Ρ ΠΏΠ°ΡΠ΅Π½ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ 6 ΠΈΡΠ»Ρ ΡΠ΅Π³ΠΎ Π³ΠΎΠ΄Π° ΠΠ²ΡΠΎΠΏΠ°ΡΠ»Π°ΠΌΠ΅Π½Ρ 648 Π³ΠΎΠ»ΠΎΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠΈΠ² 14 Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΠ» Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π½Π° ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΠ²ΡΠΎΡΠΎΠ²Π΅ΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Β«ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΎ ΠΏΠ°ΡΠ΅Π½ΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎ-ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠΉΒ», ΡΡΠ°Π²ΡΠ΅ΠΉ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π³ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ
ΠΠ΅ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ
ΠΠ΅ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π ΡΡΠΎΠΌ Π³ΠΎΠ΄Ρ ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠ΅ ΠΎΡΠ΅Π½ΠΈ, Tokyo Game Show, ΠΏΠΎΡΠ΅ΡΠΈΠ»ΠΎ ΡΠ΅ΠΊΠΎΡΠ΄Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈΠ³Ρ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΉ β Π±ΠΎΠ»Π΅Π΅ 176 ΡΡΡΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ. ΠΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠ° Π²ΡΡΡΠ°Π²ΠΊΠΈ, Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠΈ Computer Entertainment Supplierβs Association, ΠΏΡΠ΅ΠΆΠ½ΠΈΠΉ
Race conditon Π² Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅Π΄ΠΎΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ, ΠΊΠ°ΠΊ race condition. Π ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π΅Π΅ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΡΡΡ. ΠΠ²ΡΠΎΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ ΠΊΠ°ΠΊ ΠΈ Ρ ΡΠ΅ΠΌ Π΅Π΅ Π³ΠΎΡΠΎΠ²ΠΈΡΡ.
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π±Π΅ΡΠ΅Ρ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π² Π΅Π΄ΠΈΠ½ΡΠΉ ΡΡΠΆΠ΅Ρ, ΡΡΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° β Π½Π°ΠΏΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ² Π΄Π΅Π½Π΅Π³ (Π±Π°Π»Π»ΠΎΠ², ΠΊΡΠ΅Π΄ΠΈΡΠΎΠ²) ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ Π² Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΡΡΡΡ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ.
ΠΠ°ΡΡ Ρ ΠΎΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ 100 Π΄ΠΎΠ»Π»Π°ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Ρ Π½Π΅Π³ΠΎ Π½Π° ΡΡΠ΅ΡΡ, ΠΠ΅ΡΠ΅. ΠΠ½ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠ², Π²Π±ΠΈΠ²Π°Π΅Ρ ΠΠ΅ΡΠΈΠ½ Π½ΠΈΠΊ ΠΈ Π² ΠΏΠΎΠ»Π΅ Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠ΅Π΄ΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ β ΡΠΈΡΡΡ 100. ΠΠ°Π»Π΅Π΅, Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°. ΠΠ°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΡ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π§ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π²Π½ΡΡΡΠΈ? Π§ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ?
β Π£Π±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Ρ ΠΠ°ΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π΅Π½Π΅Π³ Π½Π° ΡΡΠ΅ΡΡ
ΠΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΡΠΌΠΌΠ° Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΠ°ΡΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π±Π°Π»Π°Π½ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΠΌ ΡΡΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Ρ ΠΎΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ β ΡΠΊΠ°Π·Π°ΡΡ Π΅ΠΌΡ ΠΎΠ± ΡΡΠΎΠΌ. Π‘ ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ°ΠΉΡΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΊΡΠ΅Π΄ΠΈΡΡ ΠΈ Π² ΠΌΠΈΠ½ΡΡ Π±Π°Π»Π°Π½Ρ ΡΠΉΡΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½.
β ΠΡΡΠ΅ΡΡΡ ΡΡΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΈΠ· Π±Π°Π»Π°Π½ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±Π°Π»Π°Π½ΡΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΅Π³ΠΎ Π±Π°Π»Π°Π½Ρ Ρ Π²ΡΡΠ΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΠΌΠΌΡ. ΠΡΠ»ΠΎ 100, ΡΡΠ°Π»ΠΎ 100-100=0.
β ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ Π±Π°Π»Π°Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΠ΅ΡΡ ΡΡΠΌΠΌΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π»ΠΈ.
ΠΠ΅ΡΠ΅ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π±ΡΠ»ΠΎ 0, ΡΡΠ°Π»ΠΎ 0+100=100.
β ΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠ»ΠΎΠ΄Π΅Ρ!
Π£ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄:
ΠΡΠ»ΠΈ (ΠΠ°ΡΡ.Π±Π°Π»Π°Π½Ρ >= ΡΡΠΌΠΌΠ°_ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°) Π’ΠΎ
ΠΠΎ Π²ΡΡ Π±Ρ Π½ΠΈΡΠ΅Π³ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π²ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. Π’ΠΎΠ³Π΄Π° Π±Ρ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ. ΠΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ . Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π·Π°Π±Π°Π²Π½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π°Ρ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ β ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ (ΠΈΠ»ΠΈ race condition). Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ 3 ΡΠ°Π·Π°.
Π£ ΠΠ°ΡΠΈ Π²ΡΠ΅ ΡΠ°ΠΊ ΠΆΠ΅ 100 Π±Π°ΠΊΡΠΎΠ² Π½Π° Π±Π°Π»Π°Π½ΡΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΡ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ½ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΡΡ ΠΊ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ (Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ). ΠΡΠ΅ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΠ΅ΡΡ, ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈ Π±Π°Π»Π°Π½ΡΠ° Ρ ΠΠ°ΡΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°. Π ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π±Π°Π»Π°Π½Ρ, ΠΎΠ½ Π²ΡΡ Π΅ΡΠ΅ ΡΠ°Π²Π΅Π½ 100. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΎΠΉΠ΄Π΅Π½Π°, ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π±Π°Π»Π°Π½ΡΠ° 3 ΡΠ°Π·Π° Π²ΡΡΠΈΡΠ°Π΅ΡΡΡ 100, ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΠ΅ΡΠ΅.
Π’Π°ΠΊΠΆΠ΅ race condition ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ .
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ Π³ΠΎΠ½ΠΊΠ°
Π§ΡΠΎ ΡΠ°ΠΌ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ TCP ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΆΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°, Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ½ΠΎΠ²Π°, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ ΡΠ°ΠΌΠΈ HTTP-Π·Π°ΠΏΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΈ Π² ΡΠ°Π·Π½ΠΎΠ±ΠΎΠΉ ΠΈΠ·-Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (HTTPS) ΠΈ ΡΠ΅Π·ΠΎΠ»Π²ΠΈΡΡ DNS (Π½Π΅ Π² ΡΠ»ΡΡΠ°Π΅ Ρ burpβΠΎΠΌ) ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ»ΠΎΡΠ² Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π² ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ. ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ , ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ³ΡΠ°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΠ»Ρ.
ΠΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° HTTP
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ linux Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ, Π²Π΅Π΄Ρ ΡΠ°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΡΠ΅ΠΊ TCP/IP, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΄ΡΠ°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘Π΅ΡΠ²Π΅Ρ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΠΆΠ΅ Π½Π° Π½Π΅ΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ nc google.com 80 ΠΈ Π²ΡΡΠ°Π²Ρ ΡΡΠ΄Π° ΡΡΡΠΎΠΊΠΈ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΡΡΠΈ HTTP-Π·Π°ΠΏΡΠΎΡΠ°, ΠΈ ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΈ HTTP ΠΎΡΠ²Π΅ΡΠ°. ΠΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ.
Π§ΡΠΎ ΡΠ°ΠΌ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅
ΠΠ΅Π±-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ (ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ), ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ²Π΅ΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π°ΡΠ°ΠΊΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π³ΠΎΠ² (ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ) ΠΈΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΡ Π°ΡΠ°ΠΊΠΈ*.
Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ HTTP-Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠΌΠ½ΠΈ ΠΊΠ°ΠΊ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ HTTP-Π·Π°ΠΏΡΠΎΡ.
ΠΡ ΠΊΠ°ΠΊ ΡΡ Π·Π½Π°Π΅ΡΡ, ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΏΡΡΡ ΠΈ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°:
ΠΡΠΎΡΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅
ΠΠΎ ΠΊΠ°ΠΊ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ ΡΠ·Π½Π°Π΅Ρ, ΡΡΠΎ HTTP-Π·Π°ΠΏΡΠΎΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ?
ΠΠ°Π²Π°ΠΉ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π²Π²Π΅Π΄ΠΈ nc google.com 80, Π° ΡΠ°ΠΌ
ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΠΆΠΌΠ΅ΡΡ ENTER, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ. ΠΠ°ΠΆΠΌΠ΅ΡΡ Π΅ΡΠ΅ ΡΠ°Π· β ΡΠ²ΠΈΠ΄ΠΈΡΡ ΠΎΡΠ²Π΅Ρ.
GET / HTTP/1.1\r\nHost: google.com\r\n\r\n
ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π±ΡΠ» ΠΌΠ΅ΡΠΎΠ΄ POST (Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎ Content-Length), ΡΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ HTTP-Π·Π°ΠΏΡΠΎΡ Π±ΡΠ» Π±Ρ ΡΠ°ΠΊΠΈΠΌ:
ΠΠ»ΠΈ POST / HTTP/1.1\r\nHost: google.com\r\nContent-Length: 3\r\na=1\r\n\r\n
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
Π ΠΈΡΠΎΠ³Π΅ ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ HTTP-Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΡ ΡΠ±Π΅ΡΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» \n, ΡΠΎ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° \n, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ \r ΠΈ \n, ΠΈΠ½Π°ΡΠ΅ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ ΡΡΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ.
Π§ΡΠΎ ΡΡΠΎ Π΄Π°Π΅Ρ? Π’Ρ ΠΌΠΎΠΆΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π½Π° ΡΠ΅ΡΡΡΡ, ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ 99% ΡΠ²ΠΎΠ΅Π³ΠΎ HTTP-Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΠΎΡΡΠ°Π²ΠΈΠ² Π½Π΅ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ. Π‘Π΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ ΠΏΠΎΠΊΠ° ΡΡ Π½Π΅ Π΄ΠΎΡΠ»ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° β Π΄ΠΎΡΠ»Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ (ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ).
ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΌ POST-Π·Π°ΠΏΡΠΎΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π·Π°Π»ΠΈΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°. ΠΠΎ ΠΈ Π΄Π°ΠΆΠ΅ Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠ°
Π§ΡΠΎ ΡΠ°ΠΌ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ nginx ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² HTTP-Π·Π°ΠΏΡΠΎΡΠ° Π½Π°ΡΠ½Π΅Ρ ΠΈΡ ΠΏΠ°ΡΡΠΈΡΡ, ΡΠΊΠ»Π°Π΄ΡΠ²Π°Ρ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π² ΠΊΡΡ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΈΠ΄Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±Π°ΠΉΡ β Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ Π²ΠΎΠ·ΡΠΌΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡ Π΅Π³ΠΎ ΡΠΆΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π°ΡΠ°ΠΊΠΈ.
ΠΡΡΠ°ΡΠΈ, ΠΊΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π΅ΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π³ΠΎΠ½ΠΎΠΊ.
ΠΠ±ΡΡΠ½ΠΎ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΠΎΡΡΠ±Ρ Ρ Π°ΡΠ°ΠΊΠΎΠΉ:
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π² Π‘Π£ΠΠ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ Π½Π΅ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΡΡ. ΠΡΡΠ³ΠΈΠ΅ ΡΡΠΎΡΡ ΠΈ ΠΆΠ΄ΡΡ Π² ΡΡΠΎΡΠΎΠ½ΠΊΠ΅. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π»ΠΈΡΠ½Π΅Π³ΠΎ.
ΠΠ΅ΡΡΡ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΡΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ etcd). Π ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π°ΠΏΠΈΡΡ Ρ ΠΊΠ»ΡΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π°ΠΏΠΈΡΡ, Π·Π½Π°ΡΠΈΡ ΠΎΠ½Π° ΡΠΆΠ΅ Π΅ΡΡΡ ΠΈ ΡΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π·Π°ΠΏΠΈΡΡ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ.
Π Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΠ½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ Π²ΠΈΠ΄Π΅ΠΎ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΠ²Π°Π½Π° Π Π°Π±ΠΎΡΡΠ³ΠΈ ΠΏΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ΅ΡΡΠΈΠΉ Π² race condition
ΠΠ΄Π½Π° ΠΈΠ· ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½Π° ΡΠ°ΠΌΠ° ΠΏΠΎ-ΡΠ΅Π±Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΎΠ½ΠΊΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ·ΡΠΊΠ΅ PHP ΠΏΠΎΡΠ»Π΅ session_start() ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ΅ΡΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΈ Π΅Π³ΠΎ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π°ΡΡΡΠΏΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡ (Π΅ΡΠ»ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΡΠ·ΠΎΠ²Π° session_write_close ). ΠΡΠ»ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·Π²Π°Π½ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΡΠΈΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ.
ΠΠ»Ρ ΠΎΠ±Ρ ΠΎΠ΄Π° ΡΡΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠΊ β Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·. ΠΡΠ»ΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΈΠΉ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ PHPSESSID ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π·Π°ΠΏΡΠΎΡΡ ΡΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ.
ΠΠ»ΠΈΠ·ΠΎΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ
ΠΡΠ»ΠΈ ΡΠ°ΠΉΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ race condition Ρ ΠΎΡΡΠΈΡΡΡ Π² AWS β Π²ΠΎΠ·ΡΠΌΠΈ ΡΠ°ΡΠΊΡ Π² AWS. ΠΡΠ»ΠΈ Π² DigitalOcean β Π±Π΅ΡΠΈ ΡΠ°ΠΌ.
ΠΠΎΠ³Π΄Π° Π·Π°Π΄Π°ΡΠ° ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½Π°Ρ Π±Π»ΠΈΠ·ΠΎΡΡΡ ΠΊ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΡ Π½Π΅ΡΠΎΠΌΠ½Π΅Π½Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ»ΡΡΠΎΠΌ.
ΠΠ΅Π΄Ρ Π΅ΡΡΡ ΡΠ°Π·Π½ΠΈΡΠ°, ΠΊΠΎΠ³Π΄Π° ping ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ 200 ΠΈ 10 ΠΌΡ. Π Π΅ΡΠ»ΠΈ ΠΏΠΎΠ²Π΅Π·Π΅Ρ, Π²Ρ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠΎΠ³Π΄Π° Π·Π°ΡΠ΅ΠΉΡΠΈΡΡ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ π
ΠΠ»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ race condition ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΡΠΊΠΈ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΡΠΏΠ΅Ρ Π°. ΠΡΠΏΡΠ°Π²Π»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² (keep-alive) Π² ΠΎΠ΄Π½ΠΎΠΌ, Π·Π°ΠΌΠ΅Π΄Π»ΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ. Π Π°Π·Π±ΠΈΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ΅ΠΉ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ. Π£ΠΌΠ΅Π½ΡΡΠ°ΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΉ Π΄ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΌΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Michail Badin ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ RacePWN
ΠΠ½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ librace Π½Π° ΡΠ·ΡΠΊΠ΅ C, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΡΠ΅ΠΊ ΠΈΠ· ΡΡΠ°ΡΡΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ HTTP-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅Ρ
Π£ΡΠΈΠ»ΠΈΡΡ racepwn, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ json-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠ»ΠΈΡ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ
RacePWN ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠΈΠ»ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Burp Suite), ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΉΡΠ°ΠΌΠΈ (Π²ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊ ΡΡΠΊΠΈ Π½Π΅ Π΄ΠΎΡ ΠΎΠ΄ΡΡ). Enjoy!
ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΅ΡΡ Π΅ΡΡΡ ΠΊΡΠ΄Π° ΡΠ°ΡΡΠΈ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ HTTP/2 ΠΈ Π΅Π³ΠΎ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ Π΄Π»Ρ Π°ΡΠ°ΠΊΠΈ. ΠΠΎ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ HTTP/2 Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² Π»ΠΈΡΡ ΡΡΠΎΠ½Ρ, ΠΏΡΠΎΠΊΡΠΈΡΡΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡΡ Π² ΡΡΠ°ΡΡΠΉ-Π΄ΠΎΠ±ΡΡΠΉ HTTP/1.1.