ΠΠ°Ρ
Π²Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ
Π ΡΠ²ΡΠ·ΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ Π³ΡΡΠΏΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°Ρ
Π²Π°ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ
ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π°ΡΠΈΡΠ°Π΅ΠΌΠΎΠΌΡ ΡΡΠ°ΡΡΠΊΡ ΠΊΠΎΠ΄Π°.
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π·Π°Ρ
Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π°. ΠΡΠΎ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠΎΡΠ°Ρ Π³ΡΡΠΏΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π·Π°Ρ
Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ
int pthread_rwlock_rdlock(pthread_rwlock_t* rwl);
int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwl);
int pthread_rwlock_timedrdlock(pthread_rwlock_t* rwlock,
Β const struct timespec* abs);
ΠΡΠ° Π³ΡΡΠΏΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π°Ρ
Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π°ΡΡΠΎΡΠΈΠΈΡΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
rwl
. ΠΠ°Π½Π½Π°Ρ Π³ΡΡΠΏΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Ρ
Π²Π°ΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ
rwl
, ΡΠΆΠ΅ Π·Π°Ρ
Π²Π°ΡΠ΅Π½ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ).
ΠΠ΅ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² Π³ΡΡΠΏΠΏΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°Ρ
Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΌ Π·Π°Ρ
Π²Π°ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈ Π·Π°Ρ
Π²Π°Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ
pthread_rwlock_rdlock()
ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK
β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
EAGAIN
β ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ (
PTHREAD_RWLOCK_INITIALIZER
) Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ;
EDEADLK
β Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ ΠΏΡΠΎΠ²Π΅Π» ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π·Π°Ρ
Π²Π°Ρ (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ) ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ
rwl
, ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π·Π°Ρ
Π²Π°Ρ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π΅Π» Π±Ρ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡ (Β«ΠΌΠ΅ΡΡΠ²ΠΎΠΌΡΒ») Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°;
EFAULT
β ΡΠ±ΠΎΠΉ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΡΠ΄ΡΠ° ΠΊ
rwl
;
EINVAL
β
rwl
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ.
ΠΡΠΎΡΠ°Ρ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΈ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ
pthread_rwlock_tryrdlock()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK
β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
EAGAIN
β ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ (
PTHREAD_RWLOCK_INITIALIZER
) Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ;
EBUSY
β Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ (ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΠΈ Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΡΠΈΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°);
EDEADLK
β Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ ΠΏΡΠΎΠ²Π΅Π» ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π·Π°Ρ
Π²Π°Ρ (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ) ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ
rwl
;
EFAULT
β ΡΠ±ΠΎΠΉ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΡΠ΄ΡΠ° ΠΊ
rwl
;
EINVAL
β
rwl
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ.
Π’ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· Π³ΡΡΠΏΠΏΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ
pthread_rwlock_timedrdlock()
ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΊΠΈ:
EAGAIN
β ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Ρ
Π²Π°ΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°; [37]
EDEADLK
β Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ; ΠΎΠ½ Π·Π°Ρ
Π²Π°ΡΠΈΠ» Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ, ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π»Π° Π±Ρ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°;
EINVAL
β Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π°: Π»ΠΈΠ±ΠΎ
rwl
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ, Π»ΠΈΠ±ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ°
abs
Π·Π°Π΄Π°Π½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΠΎ ΠΈΠ»ΠΈ Π²ΡΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1000 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ²;
ETIMEDOUT
β Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°Ρ
Π²Π°ΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π΄ΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΊΠ° ΡΠ°ΠΉΠΌ-Π°ΡΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ
int pthread_rwlock_wrlock(pthread_rwlock_t* rwl);
int pthread_rwlock_trywrlock(pthread_rwlock_t* rwl);
int pthread_rwlock_timedwrlock(pthread_rwlock_t* rwlock,
Β const struct timespec* abs_timeout);
Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠ³ΠΎ Π·Π°Ρ
Π²Π°ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ Π·Π°ΠΏΠΈΡΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ, Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΡΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° (Π½ΠΈ ΠΏΠΈΡΡΡΠΈΠΌΠΈ, Π½ΠΈ ΡΠΈΡΠ°ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ). Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² Π³ΡΡΠΏΠΏΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ, Π² ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π·Π°Ρ
Π²Π°ΡΠ°, ΠΏΠΎΠΏΡΡΠΊΠΈ Π·Π°Ρ
Π²Π°ΡΠ° ΠΈ Π·Π°Ρ
Π²Π°ΡΠ° Ρ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ
pthread_rwlock_wrlock()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK
β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
EAGAIN
β ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ (
PTHREAD_RWLOCK_INITIALIZER
) Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ;
EDEADLK
β Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅;
EFAULT
β ΡΠ±ΠΎΠΉ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΡΠ΄ΡΠ° ΠΊ
rwl
;
EINVAL
β
rwl
ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅Π²Π΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ
pthread_rwlock_trywrlock()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK
β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
EAGAIN
β ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ (
PTHREAD_RWLOCK_INITIALIZER
) Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ;
EBUSY
β Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠΆΠ΅ Π·Π°Ρ
Π²Π°ΡΠ΅Π½Π° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ;