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

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

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

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

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

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

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

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

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

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

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

pthread_rwlock_destroy (), pthread_rwlock_timedrdlock (), pthread_rwlock_timedwrlock (), pthread_rwlock_trywrlock (), pthread_rwlock_unlock (), pthread_rwlock_wrlock (), Ρ‚ΠΎ ΠΌ Base Definitions crannapTalEEEStd 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).

β€’Β Π Π°Π·Π΄Π΅Π» «ОписаниС» Π±Ρ‹Π» ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽ Ρ‰ ΠΈ ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎ ΠΌ:

-Β Π·Π°Π΄Π°Π½Ρ‹ условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ Ρ‰ ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ ΠΌ Π΅ΡŽΡ‚ ΠΏΡ€Π΅ΠΈ ΠΌ Ρƒ Ρ‰ Сство ΠΏΠ΅Ρ€Π΅Π΄ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽ Ρ‰ ΠΈ ΠΌ ΠΈ;

-Β Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½Π° Π²ΠΎΠ· ΠΌ оТная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_rwlock_tryrdlock();

-Β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π°Π±Π·Π°Ρ†, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎ ΠΌ говорится ΠΎ ΠΏΡ€ΠΈ ΠΌ Π΅Π½Π΅Π½ΠΈΠΈ ΠΌ акси ΠΌ ального количСство Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для обСспСчСния чтСния.

β€’Β Π‘Ρ‹Π» ΠΌ ΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ Ρ€Π°Π·Π΄Π΅Π» «Ошибки», посвящСнный описанию ΠΊΠΎΠ΄Π° ошибки [EBUSY] : Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдлагаСтся ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π£Π΄Π°Π»Π΅Π½ Π°Π±Π·Π°Ρ†, посвящСнный описанию ΠΊΠΎΠ΄Π° ошибки [EDEADLK] , Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ pthread_rwlock_tryrdlock ().

β€’Β Π‘Ρ‹Π» ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ Ρ€Π°Π·Π΄Π΅Π» Β«Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅Β».

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

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

pthread_rwlock_timedrdlock

Имя

pthread_rwlock_timedrdlockβ€” функция, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи для обСспСчСния чтСния.

Бинопсис

THR #include <pthread.h> TMO #include <time.h>

int pthread_rwlock_timedrdlock (

pthread_rwlock_t *restrict rwlock,

const struct timespec *restrict abs_timeout);

ОписаниС

Ѐункция pthread_rwlock_timedrdlock () ΠΏΡ€ΠΈ ΠΌ СняСт Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ для обСспСчСния чтСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи, адрСсуС ΠΌ ΠΎ ΠΌ Ρƒ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_rwlock_rdlock (). Однако, Ссли Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдоставлСна Π±Π΅Π· оТидания, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ освободят Π΅Π΅, это ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° истСчСт Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ истСкаСт, ΠΊΠΎΠ³Π΄Π° наступит Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π²Ρ€Π΅ ΠΌ я, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ abs_timeout (Ρ‚.Π΅. ΠΊΠΎΠ³Π΄Π° показания Π²Ρ€Π΅ ΠΌ Π΅Π½ΠΈ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ ΠΌ Ρ‹Ρ… Π² систС ΠΌ Π΅ часах станут Ρ€Π°Π²Π½Ρ‹ ΠΌ ΠΈ ΠΈΠ»ΠΈ прСвысят Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ abs_timeout), ΠΈΠ»ΠΈ Ссли Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π²Ρ€Π΅ ΠΌ я, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ abs_ timeou t, ΡƒΠΆΠ΅ наступило Π² ΠΌ ΠΎ ΠΌ Π΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π°.

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

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

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

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

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

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

Ошибки

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

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

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

[EAGAIN] Β Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄ ля чтСния Π½Π΅ ΠΌ ΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ Π΄ оставлСна, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ

ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΎ ΠΌ акси ΠΌ альноС число Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ чтСния ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΠ³Ρƒ, адрСсуСмому ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ rwlock

[EDEADLK] Β Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ Ρ‰ ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΡƒΠΆΠ΅ Ρƒ Π΄ Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ для обСспСчСния записи ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, адрСсуСмому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ rwlockr,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pthread_rwlock_timedwrlock

Имя

pthread_rwlock_timedwrlock β€” функция, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ чтСния-записи для обСспСчСния записи.

Бинопсис

THR TMO

#include <pthread.h>

#include <time.h>

int pthread_rwlock_timedwrlock (

pthread_rwlock_t *restrict rwlock,

const struct timespec *restrict abs_timeout);

ОписаниС

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