locknone: pid = 15499, seq# = 5
locknone: pid = 15499, seq# = 6
locknone: pid = 15499, seq# = 7
locknone: pid = 15499, seq# = 8
locknone: pid = 15499, seq# = 9
locknone: pid β 15499, seq# = 10
locknone: pid = 15499, seq# = 11
locknone: pid = 15499, seq# β 12
locknone: pid = 15499, seq# = 13
locknone: pid = 15499, seq# = 14
locknone: pid = 15499, seq# = 15
locknone: pid = 15499, seq# = 16
locknone: pid = 15499, seq# = 17
locknone: pid = 15499, seq# = 18
locknone: pid = 15499, seq# = 19
locknone: pid = 15499, seq# = 20
ΠΠ΅ΡΠ²ΠΎΠ΅, Π½Π° ΡΡΠΎ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, β ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ°ΡΡΡ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ΅ΠΊΡΡΠ°, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π°Π΄ΡΠ°ΡΡ ΡΡΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ 15 498). ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΠΎΡΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ 15499): ΠΎΠ½ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π» ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ 1. ΠΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠ°ΠΊ: Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ» Π·Π°ΠΏΡΡΠ΅Π½ ΡΠ΄ΡΠΎΠΌ, ΡΡΠΈΡΠ°Π» ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ (1), Π° Π·Π°ΡΠ΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π» Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΈΠΌ ΡΠΆΠ΅ ΡΡΠΈΡΠ°Π½ΠΎ (1). ΠΡΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ 20 ΡΠ°Π· (Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ ΡΠΎΠ²Π½ΠΎ 40 ΡΡΡΠΎΠΊ), ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ 40.
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ Π°ΡΠΎΠΌΠ°ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ. ΠΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ my_lock ΠΈ my_unlock ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΠΎΠ±Π»Π°ΡΡΡ (Π³Π»Π°Π²Π° 7).
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π΄Π²ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌ. ΠΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°ΡΠ°Π½ΡΠΈΠΈ, ΡΡΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° Π°ΡΠΎΠΌΠ°ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ; Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ° Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ 40. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ Π½Π΅Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΎΡ 40, ΠΈ ΡΡΠΎ Π½Π°Ρ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΌ Π±Π΅Π·ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ ΠΎΡ 1 Π΄ΠΎ 20 ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΈ ΠΎΡ 21 Π΄ΠΎ 40 Π²ΡΠΎΡΡΠΌ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π±ΡΠ΄ΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΡ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ, Π° Π²ΠΎΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ β Π΄Π΅Π»Π°Π΅Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
9.2. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²
Π―Π΄ΡΠΎ Unix Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°, ΠΎΡΡΠ°Π²Π»ΡΡ Π²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ Ρ ΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ Β«Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉΒ». Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π°ΠΉΡΠΎΠ² ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΡΠΎΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ β Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ.
Π‘ΡΠ°Π½Π΄Π°ΡΡ Posix ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ Π½Π°ΡΠ°Π»ΠΎΠΌ Π² 0 (Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π°) ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ 0 Π±Π°ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΡ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΊ ΡΠ°ΡΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ.
Π’Π΅ΡΠΌΠΈΠ½ Β«ΡΡΠ΅ΠΏΠ΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΒ» (granularity) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Posix ΡΡΠ° Π²Π΅Π»ΠΈΡΠΈΠ½Π° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 1 Π±Π°ΠΉΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠ΅ΠΏΠ΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ ΡΠ°ΠΉΠ»Ρ. ΠΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΈ Π΄Π²Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π½Π΅Π³ΠΎ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΡΠ°ΠΊΠΆΠ΅, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ (1 ΡΠ΅ΠΊΡΠ½Π΄Π°). ΠΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ°ΠΉΠ»Π° (ΡΠ°ΠΌΡΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ), ΡΡΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ Π·Π°ΠΏΠΈΡΡΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π° Π΄Π²ΡΠΌ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΆΠ΄Π°ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ°ΡΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π° ΠΏΠΎΡΠΎΠΌ Π΄ΡΡΠ³ΠΈΠΌ. ΠΠΎΠ»Π½ΠΎΠ΅ Π·Π°ΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° 3 ΡΠ΅ΠΊΡΠ½Π΄ (ΡΡΠΎ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΎΡΠ΅Π½Ρ Π³ΡΡΠ±Π°Ρ ΠΎΡΠ΅Π½ΠΊΠ°). ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΡΠΎΠ²Π΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ Π·Π°ΠΏΠΈΡΠΈ (Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ), Π²ΡΠ΅ ΠΏΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΡΠ°ΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Π°.
ΠΠ ΠΠΠΠ§ΠΠΠΠ
ΠΠΎΡΠΎΠΌΠΊΠΈ BSD ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π»ΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ flock. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±Π°ΠΉΡΠΎΠ² Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ.
ΠΡΡΠΎΡΠΈΡ
ΠΠ° Π΄ΠΎΠ»Π³ΠΈΠ΅ Π³ΠΎΠ΄Ρ Π±ΡΠ»ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΡΠ΅Π²Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠΎΠ΄Π΅ UUCP ΠΈ Π΄Π΅ΠΌΠΎΠ½ΠΎΠ² ΠΏΠ΅ΡΠ°ΡΠΈ ΠΈΠ³ΡΠ°Π»ΠΈ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (ΡΡΠΈ ΠΈΠ· Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 9.8). ΠΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ»ΠΈ Π΄Π»Ρ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π»ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ 80-Ρ .
ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² Version 7, ΠΊΡΠ΄Π° ΠΎΠ½Π° Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΠΆΠΎΠ½ΠΎΠΌ ΠΠ°ΡΡΠΎΠΌ John Bass) Π² 1980 Π³ΠΎΠ΄Ρ Π² Π²ΠΈΠ΄Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° locking. ΠΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ (mandatory locking); Π΅Π³ΠΎ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ System III ΠΈ Xenix. (Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠΏΠΈΡΠ°Π½Π° Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.)
ΠΠ΅ΡΡΠΈΡ 4.2BSD ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² (Π° Π½Π΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ) ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ flock Π² 1983. Π 1984 Π³ΠΎΠ΄Ρ ΡΡΠ°Π½Π΄Π°ΡΡ /usr/group (ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠΎΠ² Π₯/Open) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» ΡΡΠ½ΠΊΡΠΈΡ lockf, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ (Π½Π° Π·Π°ΠΏΠΈΡΡ), Π½ΠΎ Π½Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΡ.
Π 1984 Π³ΠΎΠ΄Ρ Π² System V Release 2 Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fcntl. Π€ΡΠ½ΠΊΡΠΈΡ lockf Π² ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π»Π°ΡΡ, Π½ΠΎ ΠΎΠ½Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»Π° ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΠΎΠ² fcntl. (ΠΠ½ΠΎΠ³ΠΈΠ΅ Π½ΡΠ½Π΅ΡΠ½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ lockf ΡΠ΅ΡΠ΅Π· Π²ΡΠ·ΠΎΠ² fcntl.) Π 1986 Π³ΠΎΠ΄Ρ Π² Π²Π΅ΡΡΠΈΠΈ System V Release 3 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fcntl. ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π±ΠΈΡ set-group-ID (ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π³ΡΡΠΏΠΏΡ) β ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 9.5.
Π 1988 Π³ΠΎΠ΄Ρ ΡΡΠ°Π½Π΄Π°ΡΡ Posix.1 Π²ΠΊΠ»ΡΡΠΈΠ» Π² ΡΠ΅Π±Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ fcntl, ΠΈ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ. Π‘ΡΠ°Π½Π΄Π°ΡΡ X/Open Portability Guide Issue 3 (XPG3, 1988) ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· fcntl.
9.3. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fcntl ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ Posix
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΡ Posix, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ fcntl:
#include <fcntl.h>
int fcntl(int fd, int cmd,β¦ /* struct flock *arg */);
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ β1 Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ: ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° cmd */
ΠΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° cmd. ΠΡΠΈ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, arg, ΡΠ²Π»ΡΠ»ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΡΡΡΠΊΡΡΡΡ flock:
struct flock {
short l_type; /* F_RDLCK, F_WRLCK, F_UNLCK */
short l_whence; /* SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΄Π²ΠΈΠ³ Π² Π±Π°ΠΉΡΠ°Ρ */
off_t l_len; /* ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡΠΎΠ²; 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π° */
pid_t l_pid; /* PID, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ F_GETLK */
};
ΠΠΎΡ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° cmd ):
β F_SETLK β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (l_type ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ±ΠΎ F_RDLCK, Π»ΠΈΠ±ΠΎ F_WRLCK) ΠΈΠ»ΠΈ ΡΠ±ΡΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (l_type ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ F_UNLCK), ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΠΎΠΉ flock, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ arg. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ EACCESS ΠΈΠ»ΠΈ EAGAIN.
β F_SETLKW β ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ° ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° (W Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«waitΒ»).
β F_GETLK β ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ arg. ΠΡΠ»ΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, ΠΏΠΎΠ»Π΅ l_type ΡΡΡΡΠΊΡΡΡΡ flock, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ arg, Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ F_UNLCK. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΡΡΡΡΠΊΡΡΡΠ΅ flock, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ arg, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΡΡ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² F_GETLK ΠΈ F_SETLK Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ. ΠΡΠ»ΠΈ ΠΌΡ Π²ΡΠ·Π²Π°Π»ΠΈ F_GETLK ΠΈ ΠΎΠ½Π° Π²Π΅ΡΠ½ΡΠ»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ F_UNLCK Π² ΠΏΠΎΠ»Π΅ l_type, ΡΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² F_SETLK Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ. ΠΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ³ ΡΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡ.
ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ»Π° Π²Π²Π΅Π΄Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° F_GETLK, β Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° F_SETLK Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ·Π½Π°ΡΡ, ΠΊΡΠΎ ΠΈ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π» ΡΠ΅ΡΡΡΡ (Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ). ΠΠΎ ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ F_GETLK Π²Π΅ΡΠ½Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ F_UNLCK, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ³ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΡΡΡ.