Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 176

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

TMR Если поддСрТиваСтся опция Timers, отсчСт ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ ΠΌ Π΅Π½ΠΈ происходит с использованиС ΠΌ часов CLOCK_REALTIME.

Если опция Timers Π½Π΅ поддСрТиваСтся, отсчСт ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ происходит с использованиСм систСмных часов, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ функция time (). Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ опрСдСляСтся Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ часов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π΅Π³ΠΎ отсчСта. Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… timespec опрСдСляСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ <time.h>. Ни ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΈΡ… условиях эта функция Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдоставлСна Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ достовСрности ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° abs_timeout Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСобходимости, Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдоставлСна Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

Если ΠΏΠΎΡ‚ΠΎΠΊΡƒ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΌ Ρƒ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_rwlock_timedwrlock(), пСрСдаСтся сигнал, Ρ‚ΠΎ послС Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ освобоТдСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π»ΠΎΡΡŒ.

Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ссли Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ½ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ чтСния-записи ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, адрСсуСмому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎ ΠΌ rwlock. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ ΠΎΠΏΡ€Π΅ Π΄ Π΅Π»Π΅Π½Ρ‹, Ссли эта функция вызываСтся с Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Ѐункция pthread_rwlock_timedwrlock () Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° для записи ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи, адрСсуС ΠΌ ΠΎ ΠΌ Ρƒ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwloc, прСдоставлСна. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎ ΠΌ случаС возвращаСтся ΠΊΠΎΠ΄ ошибки, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

Ошибки

Π€Ρƒ Π½ кция pthread_rwlock_timedwrlock () Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли:

[ETIMEDOUT] Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ ΠΌ ΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ прСдоставлСна Π΄ΠΎ истСчСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ ΠΌ Π΅Π½ΠΈ.

Ѐункция pthread_rwlock_timedwrlock () ΠΌ ΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли:

[EDEADLK] Β Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ Ρ‰ ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠΆΠ΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ,

адрСсуС ΠΌ ΠΎ ΠΌ Ρƒ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock;

[EINVAL] Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock, Π½Π΅ относится ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΌ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи, ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ abs_timeout, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π² наносСкундах, мСньшС нуля Π»ΠΈΠ±ΠΎ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ 1000 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌ.

Π­Ρ‚Π° функция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки [EINTR].

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

ЗамСчания ΠΏΠΎ использованию

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² Ρ‚ΠΎΠΌΠ΅ Base Definitions стандарта IEEE Std 1003.1-2001 (Section 3.285, Priority Inversion), прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒΡΡ инвСрсии ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ².

Ѐункция pthread_rwlock_timedwrlock() являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΉ Threads ΠΈ Timeouts ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ прСдоставлСна Π²ΠΎ всСх рСализациях.

ЛогичСскоС обоснованиС

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚.

Π‘ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ направлСния

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

pthread_rwlock_destroy(),pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_trywrlock (), pthread_rwlock_unlock (), pthread_rwlock_wrlock (), Ρ‚ΠΎΠΌ Base Definitions стандарта IEEE Std 1003.1-2001, <pthread. h>, <t ime. h>.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Ѐункция Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² выпускС Issue 6, основаниС ΠΌ послуТил стандарт IEEEStd 1003.1j-2000.

pthread_rwlock_trywrlock, pthread_rwlock_wrlock

Имя

pthread_rwlock_trywrlock, pthread_rwlock_wrlock β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи для обСспСчСния записи.

Бинопсис

THR

#include <pthread.h>

int pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock);

int pthread_rwlock_wrlock (pthread_rwlock_t *rwlock);

ОписаниС

Ѐункция pthread_rwlock_trywrlock () ΠΏΡ€ΠΈ ΠΌ СняСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для обСспСчСния записи ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_rwlock_wrlock(), Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ эта функция Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, адрСсуСмому ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock (для чтСния ΠΈΠ»ΠΈ записи).

Ѐункция pthread_rwlock_wrlock () ΠΏΡ€ΠΈ ΠΌ СняСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для обСспСчСния записи ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи, адрСсуС ΠΌ ΠΎ ΠΌ Ρƒ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽ Ρ‰ ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для записи, Ссли Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ Ρ‰ ΠΈΠΉ ΠΈΠ»ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽ Ρ‰ ΠΈΠΉ) Π½Π΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎ ΠΌ случаС этот ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ с ΠΌ ΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽ Ρ‰ ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌ ΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ Π²Π·Π°ΠΈ ΠΌ ΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ссли Π²ΠΎ Π²Ρ€Π΅ ΠΌ я Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ½ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ чтСния-записи (Π»ΠΈΠ±ΠΎ для записи, Π»ΠΈΠ±ΠΎ для чтСния) ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, адрСсуС ΠΌ ΠΎ ΠΌ Ρƒ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Π»Π°Π³ΠΎΠΏΡ€ΠΈΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ зависания Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Ссли Π›ΡŽΠ±Π°Ρ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вызываСтся с Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи. Если ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для обСспСчСния записи, пСрСдаСтся сигнал, Ρ‚ΠΎ послС Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ освобоТдСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π»ΠΎΡΡŒ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Ѐункция pthread_rwlock_trywrlock() Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° для записи ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи, адрСсуС ΠΌ ΠΎ ΠΌ Ρƒ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwloc, прСдоставлСна. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎ ΠΌ случаС Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ аСтся ΠΊΠΎΠ΄ ошибки, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽ Ρ‰ ΠΈΠΉ Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ функция pthread_rwlock_wrlock () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” ΠΊΠΎΠ΄ ошибки, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

Ошибки

Ѐункция pthread_rwlock_trywrlock () Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли:

[EBUSY] Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° чтСния-записи Π½Π΅ ΠΌ ΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ прСдоставлСна для записи, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΡƒΠΆΠ΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ для чтСния ΠΈΠ»ΠΈ записи.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_rwlock_wrlock() ΠΈ pthread_rwlock_trywrlock() ΠΌ ΠΎΠ³ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли:

[EINVAL] Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock, Π½Π΅ относится ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΌ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи.

Ѐункция pthread_rwlock_wrlock () ΠΌ ΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, Ссли:

[EDEADLK] Ρ‚Π΅ΠΊΡƒ Ρ‰ ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠΆΠ΅ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи для обСспСчСния записи ΠΈΠ»ΠΈ чтСния.

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ Π°ΡŽΡ‚ ΠΊΠΎΠ΄ ошибки [EINTR].

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

ЗамСчания ΠΏΠΎ использованию

Как ΡƒΠΏΠΎ ΠΌ иналось Π² Ρ‚ΠΎ ΠΌ Π΅ Base Definitions стандарта IEEE Std 1003.1-2001 (Section 3.285, Priority Inversion), прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌ ΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒΡΡ инвСрсии ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ².

ЛогичСскоС обоснованиС

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚.

Π‘ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ направлСния

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

pthread_rwlock_destroy(),pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock (), pthread_rwlock_timedwrlock (), pthread_rwlock_tryrdlock(),pthread_rwlock_unlock(), Ρ‚ΠΎΠΌ Base Definitions cΡ‚aΠ½Π΄apΡ‚aIEEEStd 1003.1-2001, <pthread.h>.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² вылускС Issue 5.

Issue 6

Для согласования со стандарто ΠΌ IEEE Std 1003.1j-2000 Π±Ρ‹Π»ΠΈ внСсСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния:

β€’ Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ «Бинопсис» Π±Ρ‹Π»Π° ΠΈΠ· ΠΌ Π΅Π½Π΅Π½Π° ΠΌ Π΅Ρ‚ΠΊΠ°. Новал ΠΌ Π΅Ρ‚ΠΊΠ° THR ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ расс ΠΌ Π°Ρ‚Ρ€ΠΈΠ²Π°Π΅ ΠΌ Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ Threads (Ρ€Π°Π½Π΅Π΅ ΠΎΠ½ΠΈ ΠΎΡ‚-

носились ΠΊ ΠΎΠΏΡ†ΠΈΠΈ Read-Write Locks стандарта IEEE Std 1003.1j-2000, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‡ΠΈΡ‚Π°Π»ΠΈΡΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ дополнСния XSI).

β€’Β Π˜Π· Ρ€Π°Π·Π΄Π΅Π»Π° «Ошибки» ΡƒΠ΄Π°Π»Π΅Π½ Π°Π±Π·Π°Ρ†, посвящСнный описанию ΠΊΠΎΠ΄Π° ошибки [EDEADLK] , Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ pthread_rwlock_trywrlock ().