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

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

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

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

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

П Ρ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ функция pthread_mutexattr_getpshared() Π²ΠΎΠ·Π²Ρ€Π° Ρ‰ Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ сохраняСт считанноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° process-shared ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° attr Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, адрСсуСмом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ pshared, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС возвращаСтся ΠΊΠΎΠ΄ ошибки, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

Ошибки

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

[ EINVAL] Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ attr, Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

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

[EINVAL] Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π° Π΄ Π°Π½Π½ΠΎΠ΅ Π΄ ля Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄ ля этого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

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

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

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

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

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

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

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

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

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

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

pthread_cond_destroy(), pthread_create(), pthread_mutex_destroy(), pthread_mutexattr_destroy (), Ρ‚ΠΎ ΠΌ Base Definidons стандарта IEEE Std 1003.1-2001, <pthread.h>.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² выпускС Issue 5. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ для согласования с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΌ POSIX Threads Extension.

Issue 6

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutexattr_getpshared() ΠΈ pthread_mutexattr_setpshared () ΠΎΡ‚ ΠΌ Π΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΉ Threads ΠΈ Thread Process-Shared Synchronization.

Π’ цСлях согласования со стандарто ΠΌ ISO/IEC 9899: 1999 Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutexattr_getpshared () Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово restrict.

pthread_mutexattr_gettype, pthread_mutexattr_settype

Имя

pthread_mutexattr_gettype, pthread_mutexattr_settype β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ считывания ΠΈ установки Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° type.

Бинопсис

XSIΒ #include <pthread.h>

int pthread_mutexattr_gettype (

const pthread_mutexattr_t *restrict attr, int *restrict type); int pthread_mutexattr_settype (

pthread_mutexattr_t *attr, int type);

ОписаниС

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutexattr_gettype() ΠΈ pthread_mutexattr_settype() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для считывания ΠΈ установки соотвСтствСнно Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° type. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ задаСтся ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€Π΅ type. По Ρƒ ΠΌ ΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ type устанавливаСтся Ρ€Π°Π²Π½Ρ‹ ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ PTHREAD_MUTEX_DEFAULT.

Атрибут type содСрТит Ρ‚ΠΈΠΏ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡΠ°. Допусти ΠΌ Ρ‹ ΠΌ ΠΈ значСния ΠΌ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° type ΠΌ ΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽ Ρ‰ ΠΈΠ΅:

PTHREAD_MUTEX_NORMAL

ΠœΡŒΡŽΡ‚Π΅ΠΊΡ этого Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π·Π°ΠΈ ΠΌ ΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠŸΠΎΡ‚ΠΎΠΊ, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡ Π±Π΅Π· ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΅Π³ΠΎ разблокирования, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π²ΠΎ Π²Π·Π°ΠΈ ΠΌ ΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎ ΠΌ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΌ Ρƒ повСдСнию. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΌ Ρƒ повСдСнию.

PTHREAD_MUTEX_ERRORCHECK

ΠœΡŒΡŽΡ‚Π΅ΠΊΡ этого Ρ‚ΠΈΠΏΠ° выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок. ΠŸΠΎΡ‚ΠΎΠΊ, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Π±Π΅Π· ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΅Π³ΠΎ разблокирования, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ ошибки. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, гСнСрируСтся ΠΊΠΎΠ΄ ошибки. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Ρ‚Π°ΠΊΠΆΠ΅ гСнСрируСтся ΠΊΠΎΠ΄ ошибки.

PTHREAD_MUTEX_RECURS IVE

П ΠΎΡ‚ΠΎΠΊ, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Π±Π΅Π· ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΅Π³ΠΎ разблокирования, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚. Π’Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, возникаю Ρ‰ ая Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрСблокирования ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² Ρ‚ΠΈΠΏΠ° PTHREAD_MUTEX_NORMAL, Π½Π΅ ΠΌ ΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ с ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡΠ° ΠΌ ΠΈ этого Ρ‚ΠΈΠΏΠ°. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ количСства Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ освободят ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ смоТСт Π΅Π³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, гСнСрируСтся ΠΊΠΎΠ΄ ошибки. ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Ρ‚Π°ΠΊΠΆΠ΅ гСнСрируСтся ΠΊΠΎΠ΄ ошибки.

PTHREAD_MUTEX_DEFAULT

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° рСкурсивного блокирования ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ° этого Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ, Π½Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию. РСализация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ этого Ρ‚ΠΈΠΏΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ².

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

ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ функция pthread_mutexattr_gettype () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ сохраняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° type, считанноС ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° attr, Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, адрСсуСмом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ type; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

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

Ошибки

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

[EINVAL] Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ type, Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

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

[EINVAL] Β Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ attr, Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

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

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

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

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

Π’ прилоТСниях ΠΏΡ€Π΅ Π΄ лагалось Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡ Ρ‚ΠΈΠΏΠ° PTHREAD_MUTEX_RECURSIVE с условны ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅ ΠΌ Π΅Π½Π½Ρ‹ ΠΌ ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСявная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, выполнСнная Π΄ ля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ pthread_cond_timedwait () ΠΈΠ»ΠΈ pthread_cond_wait (), ΠΌ ΠΎΠΆΠ΅Ρ‚ Π² Π΄ Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ освобо Π΄ ΠΈΡ‚ΡŒ ΠΌ ΡŒΡŽΡ‚Π΅ΠΊΡ (Ссли ΠΎΠ½ Π±Ρ‹Π» Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ ΠΌ Π½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ). Если это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉ Π΄ Π΅Ρ‚, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ с ΠΌ ΠΎΠΆΠ΅Ρ‚ Ρƒ Π΄ ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΏΡ€Π΅ Π΄ ΠΈΠΊΠ°Ρ‚Π°.

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

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

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

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

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

pthread_cond_timedwait(), Ρ‚ΠΎΠΌ Base Definitions стандарта IEEE Std 1003.1-200l, <pthread.h>.

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

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

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ список ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ Open Group Corrigendum U033/3. Π‘Ρ‹Π» ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ Ρ€Π°Π·Π΄Π΅Π» «Бинопсис» для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutexattr_gettype (), Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚ΠΈΠΏ const pthread_mutexattr_t*.

Π’ цСлях согласования со стандартом ISO/IEC 9899: 1999 Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutexattr_gettype Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово restrict.

pthread_once

Имя

pthread_once β€” функция Π΄ ΠΈΠ½Π° ΠΌ ичСской ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Бинопсис

THR #include <pthread.h>

int pthread_once (pthread_once_t *once_control, void (*init_rout_ne) (void)); pthread_once_t once_control = PTHREAD_ONCE_INIT;

ОписаниС

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎ ΠΌ ΠΎΠ±Ρ€Π° Ρ‰ Π΅Π½ΠΈΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_once() Π»ΡŽΠ±Ρ‹ ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎ ΠΌ процСсса с Π·Π°Π΄Π°Π½Π½Ρ‹ ΠΌ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ once_control Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° функция ini t_routine Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ€Π° Ρ‰ Сния ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_once () с Ρ‚Π΅ ΠΌ ΠΆΠ΅ ΠΏΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ΠΎ ΠΌ once_control Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ init_routin e. Π’ΠΎΠ·Π²Ρ€Π° Ρ‰ Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_once() ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция init_routine Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. ΠŸΠ°Ρ€Π° ΠΌ Π΅Ρ‚Ρ€ once_control опрСдСляСт, Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒΠ»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ Ρ‰ Π°Π» функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.