ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ ΠΎΠ½ Π·Π°Π½ΡΡ, ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ° Ρ Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ (Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ°) Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΌΡΡΡΠ΅ΠΊΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΎ Π²Π»Π°Π΄Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ.
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΏΠ°ΠΌΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ. ΠΠ°ΠΌΡΡΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ° Π΅ΡΡΡ Π²Π»Π°Π΄Π΅Π»Π΅Ρ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ (ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ) ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΡΠ°Π²Π° Π½Π° Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΈΠΌ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΡΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° pthread_mutex_t ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎ ΠΌ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌ ΡΡΡΠ΅ΠΊΡΠ°. ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΠΌ ΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌ ΡΡΡΠ΅ΠΊΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π» Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ° ΠΌ Π΅ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ pthread_mutex_init (). ΠΡΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°ΠΊΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ ΡΠΈΠΏ. ΠΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌ ΡΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΠ°Π±Π». 5.3.
Π’Π°Π±Π»ΠΈΡΠ° 5.3. Π€ΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΌΡΡΡΠ΅ΠΊΡΠ½ΠΎΠΌΡ Π°ΡΡΠΈΠ±Ρ Ρ Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ
ΠΡΠΎΡΠΎΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
int pthread_mutexattr_init (pthread_mutexattr_t * attr);
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr, Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ
int pthread_mutexattr_destroy (pthread_mutexattr_t * attr);
Π Π°Π·ΡΡΡΠ°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_mutexattr_init()
int pthread_mutexattr_setprioceiling (pthread_mutexattr_t * attr, int prioceiling);
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ prioceiling ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°. ΠΡΡΠΈΠ±ΡΡ prioceiling ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π΄Π΅Π», Π·Π°ΡΠΈΡΠ°Π΅ΠΌΡΠΉ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΡΡΠΎΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠ΅ΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
SCHED_FIFO
int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * restrict attr, int *restrict prioceiling);
int pthread_mutexattr_setprotocol (pthread_mutexattr_t * attr, protocol int protocol);
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ protocol ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
PTHREAD_PRIO_NONE
(Π½Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π»ΠΈ
Ρ
Π½ΠΈ
Ρ);
int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * restrict attr, int *restrict protocol);
PTHREAD_PRIO_INHERIT
(ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ ΠΏΠΎΡΠΎΠΊ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΡΠ°ΠΌΡΠΌ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΠΈΠ· ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Π»Π°Π΄Π΅Π΅Ρ Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ);
PTHREAD_PRIO_PROTECT
(ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ ΠΏΠΎΡΠΎΠΊΠΈ, Π²Π»Π°Π΄Π΅ΡΡΠΈΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΈΠ²ΡΡΡΠΈΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² Π²ΡΠ΅Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Π»Π°Π΄Π΅ΡΡ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡΡΠΎΠ³ΠΎ, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ Π»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΈΠ· ΡΡΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ²)
int pthread_mutexattr_setpshared (pthread_mutexattr_t * attr, int pshared);
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ process-shared ΠΌΡΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ pshared ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
int pthread_mutexattr_getpshared (const pthread_mutexattr_t * restrict attr, int *restrict pshared);
PTHREAD_PROCESS_SHARED
(ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΏΠ°ΠΌΡΡΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ);
PTHREAD_PROCESS_PRIVATE
(ΠΌΡΡΡΠ΅ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°)
int pthread_mutexattr_settype (pthread_mutexattr_t* attr, int type);
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°
type
ΠΌΡΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ
attr
. ΠΡΡΠΈΠ±ΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°
type
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ Ρ.Π΄. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ
type
ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
int
PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_ERRORCHECK PTHREAD_MUTEX_NORMAL
pthread_mutexattr_gettype (const pthread_mutexattr_t * restrict attr, int *restrict type);
Π‘Π°ΠΌΡΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠ°, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡ: Π·Π°ΠΊΡΡΡΡΠΌ ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ. ΠΠ°ΠΊΡΡΡΡΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ, Π»ΠΈΠ±ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅ Ρ Π΅Π½ Π΄Π°Π½Π½ΡΠΉ ΠΌΡΡΡΠ΅ΠΊΡ. Π’Π°ΠΊΠΎΠΉ ΠΌΡΡΡΠ΅ΠΊΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΡΠΈΠ½ΡΠΈΠΏ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π°ΠΊΡΡΡΠΎΠ³ΠΎ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡ. 5.5. ΠΡΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΉ Π΄Π»Ρ ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Π Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ POSIX ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ ΠΌΡΡΡΠ΅ΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ, ΠΊΠ°Π½Π°Π»Π°ΠΌ, ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ°Π·Π΄Π΅Π»Π°ΠΌΠΈ
ΠΡΡΡΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Β«Π³ΠΎΠ½ΠΎΠΊΒ». ΠΡΡΡΠ΅ΠΊΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Β«Π³ΠΎΠ½ΠΎΠΊΒ», ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠ°Π·Π΄Π΅Π»Ρ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄ Π»ΠΈΡΡΠΈΠ½Π³Π°5.1. Π Π½Π΅ΠΌ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ»Ρ Π·Π°ΡΠΈΡΡ ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΡ.
// ΠΠΈΡΡΠΈΠ½Π³ 5.1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ Π·Π°ΡΠΈΡΡ
//Β ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ²
// . . .
pthread_t ThreadA, ThreadB; pthread_mutex_t Mutex,-pthread_mutexattr_t MutexAttr;
void *task1(void *X) {
pthread_mutex_lock(&Mutex); // ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΊΠΎΠ΄Π°.
pthread_mutex_unlock(&Mutex);
return(0) ;
}
void *task2 (void *X) {
pthread_mutex_lock(&Mutex) ;
// ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΊΠΎΠ΄Π°.
pthread_mutex_unlΠΎΡk (&Mu t ex) ; return(0) ;
}
int main(void) {
//...
pthread_mutexattr_init (&MutexAttr) ;
pthread_mutex_init (&Mutex, &MutexAttr) ;
//Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
pthread_create(&ThreadA, NULL, taskl, NULL) ; pthread_create(&ThreadB,NULL, task2,NULL) ;
//...
return(0) ;