ΠΠ°Ρ Π²Π°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ°
ΠΠ°Ρ Π²Π°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΡΡΠ΅ΠΌΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, Π² ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ Π»Π΅ΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· native QNX API SyncMutexLock().
ΠΡΠΎΡΡΠΎΠΉ Π·Π°Ρ Π²Π°Ρint pthread_mutex_lock(pthread_mutex_t* mutex);
Π€ΡΠ½ΠΊΡΠΈΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ mutex. ΠΡΠ»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΡΠΎ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ pthread_mutex_lock() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌ ΡΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ, ΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_mutex_lock() Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ. QNX ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΏΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (ΡΠΌ. Π²ΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π» Β«ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°Β»). ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ° Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ. ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π·Π°Ρ Π²Π°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΡΡΠ½ΠΊΡΠΈΡ pthread_mutex_lock() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ EDEADLK ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ° ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_mutex_lock() ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EAGAIN β Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°;
EDEADLK β Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π·Π°Ρ Π²Π°Ρ (ΡΠ΅ΠΆΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ);
EINVAL β Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° mutex.
ΠΠΎΠΏΡΡΠΊΠ° Π·Π°Ρ Π²Π°ΡΠ°int pthread_mutex_trylock(pthread_mutex_t* mutex);
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ Π»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ mutex, ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΎΠ½Π° Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ EBUSY.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EAGAIN β Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°;
EBUSY β ΠΌΡΡΡΠ΅ΠΊΡ mutex ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½;
EINVAL β Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° mutex.
ΠΠ°Ρ Π²Π°Ρ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ#include <pthread.h>
#include <time.h>
int pthread_mutex_timedlock(pthread_mutex_t* mutex,
const struct timespec* abs_timeout);
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ Π»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ (mutex), ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΏΠΎΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΌΡΡΡΠ΅ΠΊΡ. ΠΡΠ»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠ΅Π½, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ° Π»ΠΈΠ±ΠΎ Π΄ΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ abs_timeout. ΠΡΠ»ΠΈ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΆΠ΅ Π½Π°ΡΡΡΠΏΠΈΠ»ΠΎ, ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π²ΠΎΠΎΠ±ΡΠ΅, Π½ΠΎ Π·Π°Ρ Π²Π°Ρ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½.
ΠΠ°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ°ΡΠ°ΠΌ REALTIME_CLOCK, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΠΎΠ² ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² abs_timeout. Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ timespec ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ <time.h>.
ΠΡΠ»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π½ Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° PRIO_INHERIT, ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΠΌΡΡΡΠ΅ΠΊΡΠ΅ ΠΏΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° Π·Π°Ρ Π²Π°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EAGAIN β Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°;
EDEADLK β Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π·Π°Ρ Π²Π°Ρ (ΡΠ΅ΠΆΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ);
EINVAL β ΠΌΡΡΡΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ (Π°ΡΡΠΈΠ±ΡΡ protocol ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ PTHREAD_PRIO_PROTECT), Π½ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²ΡΠ·Π²Π°Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΡΠ΅ Π³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΡ; ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ (ΠΌΡΡΡΠ΅ΠΊΡ Π½Π΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½), Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ abs_timeout, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄, ΠΌΠ΅Π½ΡΡΠ΅ Π½ΡΠ»Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ 1000 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ²; ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ mutex, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ β ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ.
ETIMEDOUT β ΠΌΡΡΡΠ΅ΠΊΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Ρ Π²Π°ΡΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠΌ-Π°ΡΡ ΠΈΡΡΠ΅ΠΊ.
ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ°
int pthread_mutex_unlock(pthread_mutex_t* mutex);
Π€ΡΠ½ΠΊΡΠΈΡ pthread_mutex_unlock() ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ mutex. ΠΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΡΠΎ ΠΏΠΎΡΠΎΠΊ Ρ Π½Π°ΠΈΠ²ΡΡΡΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ (ΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠ°Π²Π½ΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°Ρ Π΄ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Ρ ΠΆΠ΄Π°Π²ΡΠΈΠΉ) Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
ΠΠ»Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ², ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π·Π°Ρ Π²Π°Ρ, ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Ρ Π²Π°ΡΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EINVAL β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ mutex, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ β ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ;
EPERM β Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
Π Π°Π·ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΡΡΡΠ΅ΠΊΡ
int pthread_mutex_destroy(pthread_mutex_t* mutex);
ΠΡΠ·ΠΎΠ² ΡΠ°Π·ΡΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΡΡΡΠ΅ΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ mutex. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π±Π΅Π· ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° pthread_mutex_init().
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
EOK β ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅;
EBUSY - ΠΌΡΡΡΠ΅ΠΊΡ Π·Π°Ρ Π²Π°ΡΠ΅Π½ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·ΡΡΡΠ΅Π½ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ;
EINVAL β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ mutex, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ - ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ POSIX
Π native QNX API Π΅ΡΡΡ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ POSIX-ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΠΏ POSIX-ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΎΡ sync_t, ΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ POSIX, ΠΈ Β«ΡΠΎΠ΄Π½ΡΡ Β» native-ΡΡΠ½ΠΊΡΠΈΠΉ QNX. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΠΈ ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΠΆΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΆΠ΅ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ.
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Β«ΠΌΠ΅ΡΡΠ²ΠΎΠ³ΠΎΒ» ΠΌΡΡΡΠ΅ΠΊΡΠ°#include <sys/neutrino.h>
int SyncMutexRevive(sync_t* sync);
int SyncMutexRevive_r(sync_t* sync);
ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ[36] ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ DEAD. ΠΡΡΡΠ΅ΠΊΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ DEAD, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΈ Π·Π°Ρ Π²Π°ΡΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ. Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠΌΠΈΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ, Π·Π°Ρ Π²Π°ΡΠΈΠ²ΡΠΈΠΉ ΠΌΡΡΡΠ΅ΠΊΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π² ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ·ΠΎΠ²Π° Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΠΈ Π΅Π³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊ Π·Π°Ρ Π²Π°ΡΠΎΠ² ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² 1 Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
ΠΡΠΈΠ±ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠFAULT β ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ;
EINVAL β ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ DEAD;
ETIMEDOUT β ΠΎΡΠΌΠ΅Π½Π° Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎ ΡΠ°ΠΉΠΌ-Π°ΡΡΡ ΡΠ΄ΡΠ° (ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ TimerTimeout()).
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ Β«ΡΠΌΠ΅ΡΡΠΈΒ» ΠΌΡΡΡΠ΅ΠΊΡΠ°ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΊΠ°ΠΊ DEAD ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ SyncMutexEvent(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ ΡΠΎ Β«ΡΠΌΠ΅ΡΡΡΡΒ» ΠΌΡΡΡΠ΅ΠΊΡΠ°.
#include <sys/neutrino.h>
int SyncMutexEvent(sync_t* sync, struct sigevent* event);
int SyncMutexEvent_r(sync_t* sync, struct sigevent* event);
ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡΡΡΠ΅ΠΊΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ DEAD (ΡΠΎ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΠΌΡΡΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» Π·Π°Ρ Π²Π°Ρ ΠΌΡΡΡΠ΅ΠΊΡΠ°). ΠΠ°Ρ Π²Π°ΡΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΎΠΊΠ°Π·Π°Π²ΡΠΈΠΉΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ DEAD, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π»Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ SyncMutexRevive().
ΠΡΠΈΠ±ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
EAGAIN β Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΄ΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ°;
EFAULT β ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ sync;
EINVAL β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ sync, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°
ΠΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π°, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠ»ΡΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ push() ΠΈΠ»ΠΈ pop(), ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΡΠΈΠ»ΡΠ½Π°Ρ ΠΏΡΡΠ°Π½ΠΈΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ΄ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. Π Π΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ. ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡΡΡΠ΅ΠΊΡ ΠΈ Π½ΠΈΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡΠΈΡΠΈΠ½Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π·Π΄Π΅ΡΡ ΡΠΌΠ΅ΡΠ°Π»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠΈ Π΄Π²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
/* Π¨Π°Π±Π»ΠΎΠ½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΄Π°Π½Π½ΡΡ */
template <class T> class CDataQueue {
public:
CDataQueue() { pthread_mutex_init(&_mutex, NULL); }
~CDataQueue() { pthread_mutex_destroy(&_mutex); }
void push(T _new_data) {
pthread_mutex_lock(&_mutex);
data_queue.push(_new_data);
data_event.reset();
pthread_mutex_unlock(&_mutex);
}
T pop() {
data_event.wait();