β’ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ.
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Ρ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠΌ#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;
EINVAL β Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ cond.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²int pthread_cond_broadcast(pthread_cond_t* cond);
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ cond. ΠΠΎΡΠΎΠΊΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ². ΠΠ»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ FIFO.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EFAULT β ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌ cond ΠΈΠ»ΠΈ mutex;
EINVAL β Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ cond.
Π Π°Π·ΡΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
int pthread_cond_destroy(pthread_cond_t* cond);
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ cond. ΠΠ»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ»Π°Π΅ΡΡΡ cond, Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ pthread_cond_init(). Π€ΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EBUSY β Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ cond;
EINVAL β Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ cond.
ΠΠ΄ΡΡΠ°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°
QNX ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ) ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (sleepon). ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π·Π° Π²Π°Ρ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΠ‘. ΠΠ½Π΅ΡΠ½Π΅ ΠΆΠ΄ΡΡΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΠ° ΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΡΡΡΠ΅ΠΊΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Π²ΡΠ΅Ρ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠΈΠΉ ΠΌΡΡΡΠ΅ΠΊΡ. ΠΠ‘ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΆΠ΄ΡΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ. Π ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌ, Π½ΠΎ ΠΎΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΠΆΠ΄ΡΡΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ <pthread.h>.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ
ΠΠ°Ρ Π²Π°Ρ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° Π·Π°Ρ Π²Π°ΡΠ° ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ:
int pthread_sleepon_lock(void);
int pthread_sleepon_unlock(void);
Π€ΡΠ½ΠΊΡΠΈΡ Π·Π°Ρ Π²Π°ΡΠ° pthread_sleepon_lock() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
EDEADLK β ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°;
EAGAIN β ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅, Π΅ΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ pthread_sleepon_unlock() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
EPERM β Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄Π»Ρ ΠΆΠ΄ΡΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ : ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ°.
int pthread_sleepon_wait(const volatile void* addr);
int pthread_sleepon_timedwait(const volatile void* addr, uint64_t nsec);
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ»ΡΡ addr (ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ). ΠΡΠ»ΠΈ ΡΡΠΎΡ Π°Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅, Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ. ΠΠΎΡΠΎΠΊ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΡΠΉ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΡΡΡΠ΅ΠΊΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΡ ΠΈΠΌ Β«ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ Β» ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π½Π° Π²ΡΠ·ΠΎΠ²Π΅ pthread_join()) β ΡΡΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠΈΠΉ Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ². Π Π°Π½Π΅Π΅ ΠΌΡ ΡΠΆΠ΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠ΅ΠΉΡΠ°Ρ ΠΆΠ΅ Π»ΠΈΡΡ ΠΊΠΎΡΠΎΡΠΊΠΎ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ Ρ ΠΈΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ - Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. Π ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΠ°Ρ ΡΡ Π΅ΠΌΠ° ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π° ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΊΠΎΠ΄Π°:
void* threadfunc(void* data) {
...
return NULL;
}
...
// Π·Π΄Π΅ΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ (N) ΠΏΠΎΡΠΎΠΊΠΎΠ²:
pthread_t tid[N];
for (int i = 0; i < N; i++)
pthread_create(tid + 1, NULL, threadfunc, NULL);
// Π° Π²ΠΎΡ Π·Π΄Π΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²!
for (int i = 0; i < N; i++)
pthread_join(tid + 1, NULL);
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π΅ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΏΡΠ³Π°Π΅Ρ ΡΠΎ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²ΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΈΡΠ°Π½ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΈ ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ. Π ΡΡΠΎ ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ. ΠΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π²Π΅ΡΠ΅Π½: Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΈΠΊΠ»Π΅ ΠΏΠΎΡΠΎΠΊ j Β«Π·Π°Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡΒ», Π° ΠΌΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ tid[j], ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ³Π΄Π°-ΡΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½Π°ΡΡΡΠΏΠΈΡ, ΠΌΡ Β«ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΒ» ΠΏΡΠΎΠ±Π΅Π³Π°Π΅ΠΌ Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ i, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ tid[i] ΡΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈΡΡ ΡΠ°Π½Π΅Π΅. Π’Π°ΠΊ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½ ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.