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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QNX/UNIX: Анатомия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 71

Автор Π¦ΠΈΠ»ΡŽΡ€ΠΈΠΊ ОлСг Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡

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

EOK
β€” ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅;

EINVAL
β€” Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚
attr.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

int pthread_cond_init(pthread_cond_t* cond, pthread_condattr_t* attr);

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

cond
со значСниями, установлСнными Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ
attr
. ВмСсто прямого Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
pthread_cond_init()
для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ статичСских условных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ пространства ΠΈΠΌΠ΅Π½
namespace
Π»ΠΈΠ±ΠΎ явно описанных с ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ
static
) ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ макросом
PTHREAD_COND_INITIALIZER
.

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

EOK
β€” ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅;

EAGAIN
β€” Π½Π΅Ρ‚ свободных систСмных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации;

EBUSY
β€” пСрСмСнная
cond
ΡƒΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π½Π΅ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π»Π°ΡΡŒ;

EFAULT
β€” ошибка доступа ядра ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ
cond
ΠΈΠ»ΠΈ
attr
;

EINVAL
β€” Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
cond
.

ОТиданиС условия

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅

int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

cond
ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ
mutex
. ΠŸΠΎΡ‚ΠΎΠΊ блокируСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ разблокирования Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
cond
(
pthread_cond_signal()
ΠΈΠ»ΠΈ
pthread_cond_broadcast()
). ΠœΡŒΡŽΡ‚Π΅ΠΊΡ
mutex
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡ‚ΠΎΠΊ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΎΠΌ сигнала ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ любом случаС ΠΏΡ€ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ оТидания ΠΏΠΎΡ‚ΠΎΠΊ вновь Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ
mutex
.

НС слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ рСкурсивный Π·Π°Ρ…Π²Π°Ρ‚.

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

EOK
β€” ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ оТидания Π»ΠΈΠ±ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ сигналом;

EAGAIN
β€” нСдостаток систСмных рСсурсов для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ оТидания Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

EFAULT
β€” ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ обращСния ΠΊ указатСлям
cond
ΠΈΠ»ΠΈ
mutex;

EINVAL
β€” возвращаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ситуациях:

Β β€’Β Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚

cond
ΠΈΠ»ΠΈ
mutex;

Β β€’Β ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚

cond
, для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ²;

Β β€’Β Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ.

ОТиданиС с Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚ΠΎΠΌ

#include <time.h>

int pthread_cond_timedwait(pthread_cond_t* cond,

Β pthread_mutex_t* mutex, const struct timespec* abstime);

ПовСдСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ оТидания, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ наступлСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ

abstime
.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ послС наступлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ совсСм Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вСрнСтся ΠΊ Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. ПослС наступлСния этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ функция ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ· состояния блокирования Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² состояниС готовности ΠΈ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°. Если ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ Π² это врСмя Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² состояниС блокирования Π½Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ΅.

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

EOK
β€” ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ оТидания Π»ΠΈΠ±ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ сигналом;

EAGAIN
β€” нСдостаток систСмных рСсурсов для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ оТидания Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

EFAULT
β€” ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ обращСния ΠΊ указатСлям
cond
ΠΈΠ»ΠΈ
mutex
;

EINVAL
β€” возвращаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ситуациях:

Β β€’Β Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚

cond
ΠΈΠ»ΠΈ
mutex
;

Β β€’Β ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚

cond
, для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ²;

Β β€’Β Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠΌ.

ETIMEDOUT
β€” Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π½Π°ΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²
abstime.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ условия

Π¨Ρ‚Π°Ρ‚Π½Ρ‹ΠΌ способом разблокирования ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, являСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ условия. Π’ native API это функция

SyncCondvarSignal()
, которая ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ POSIX-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ:
pthread_cond_signal()
ΠΈ
pthread_cond_broadcast()
. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрвая ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½, самый ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ· ΠΆΠ΄ΡƒΡ‰ΠΈΡ… выполнСния условия, Π° вторая ΠΏΡ€ΠΎΠ±ΡƒΠΆΠ΄Π°Π΅Ρ‚ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ выполнСния условия.

Однако Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ спСцифику оТидания Π²Π½ΡƒΡ‚Ρ€ΠΈ критичСской сСкции: Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

pthread_cond_broadcast()
Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΠ· состояния блокирования Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² состояниС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ смоТСт Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самый ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠΠ΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ способом Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ оТидания Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ нСмаскированного сигнала UNIX. Если для Π΄Π°Π½Π½ΠΎΠ³ΠΎ сигнала ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΎΠ½ выполнится Π±Π΅Π· Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°, Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°Ρ…Π²Π°Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΡƒΠΆΠ΅ послС Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ условия для Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°

int pthread_cond_signal(pthread_cond_t* cond);

Ѐункция ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π² состояниС готовности самый ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

cond
, послС Ρ‡Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ Π·Π°Ρ…Π²Π°Ρ‚Π° своСго ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠ°. Если Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с Ρ€Π°Π²Π½Ρ‹ΠΌ (ΠΈ Π²Ρ‹ΡΡˆΠΈΠΌ) ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ разблокируСтся Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π» дольшС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ….

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

EOK
β€” ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅;

EFAULT
β€” ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ обращСния ΠΊ указатСлям
cond
ΠΈΠ»ΠΈ
mutex
;