}
private:
std::queue<T> _data_queue;
event data_event;
};
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ CDataQueue Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²Π½ΠΎΠ²Ρ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΡΠΎΠΌΠ΅ ΠΏΡΡΡΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅Ρ Π΄Π°Π½Π½ΡΡ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²Π½Π΅ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΈ ΡΡΠΈΡΠ°Π΅Ρ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅. Π’ΠΎΠ½ΠΊΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΌ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ pop(), Π° ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ push().
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π² ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ, Π²ΠΎΠΏΡΠ΅ΠΊΠΈ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠ΅ΠΌΡΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎ, Π° ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ.
Π ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π°ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ Β«Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΡ Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² β ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ (Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ ) ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pop() ΠΈΠ»ΠΈ push(), Π½Π°ΡΠ½Π΅ΡΡΡ ΠΏΡΡΠ°Π½ΠΈΡΠ°, ΠΈ ΡΠ΅ΠΌ ΡΡΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ, ΡΠΊΠ°Π·Π°ΡΡ ΡΡΡΠ΄Π½ΠΎ. ΠΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΊΠΎΠ΄ ΠΎΠ±Π΅ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΈΠΌ ΡΡΠ°ΡΡΠΊΠ°ΠΌ ΠΊΠΎΠ΄Π°, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π½ΠΎ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, - ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΡΡΡΠ΅ΠΊΡ
ΠΡΡΡΠ΅ΠΊΡ (ΠΎΡ mutual exclusion β Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅) β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ QNX Neutrino. ΠΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠΈΠΊΡΠΎΡΠ΄ΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ. ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ° β Π·Π°ΡΠΈΡΠ° ΡΡΠ°ΡΡΠΊΠ° ΠΊΠΎΠ΄Π° ΠΎΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊΠΎΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°ΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠ΅ΠΉ, ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ.
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π·Π°Ρ Π²Π°ΡΠ°) pthread_mutex_lock() ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ, Π·Π°Ρ Π²Π°ΡΠ΅Π½ Π»ΠΈ ΡΠΆΠ΅ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, ΡΠΎ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π½Π΅Ρ, ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΡΡΡΠ΅ΠΊΡ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π΅Π³ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΠ» (ΡΠΎ Π΅ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ°) ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ, ΡΡΠΎ ΠΎΠ½ Π·Π°Ρ Π²Π°ΡΠ΅Π½.
ΠΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ, Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Ρ, ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ) pthread_mutex_unlock(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ Π΅Π΅ ΠΏΠΎΡΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²Π»Π°Π΄Π΅Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, ΡΠΎ ΠΎΠ½Π° ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΠ‘ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ ΡΠ΅Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π½Π°ΠΈΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΈ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ.
Π QNX Neutrino 6.2.1 ΠΌΡΡΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΎΠ½ΠΊΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠ²ΠΎΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ ΠΈΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅ Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ.
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Ρ ΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΡΡΡΠ΄Π° ΠΈ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΡΡΡΠ΅ΠΊΡΠ°. ΠΡΡΡΠ΅ΠΊΡ Π½Π΅Π»ΡΠ·Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ Π²Π°ΡΠΈΠ» ΠΌΡΡΡΠ΅ΠΊΡ, ΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π΅Π³ΠΎ Β«ΠΎΡΠΏΡΡΡΠΈΡΡΒ». ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ (tid ΠΏΠΎΡΠΎΠΊΠ°), ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π² Π½ΡΠΆΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° Π΄Π»Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ². ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π·Π½Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΌΡΡΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ, ΡΠΆΠ΅ Π·Π°Ρ Π²Π°ΡΠΈΠ²ΡΠΈΠΉ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ (ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠ΅ΠΉ deadlock β ΠΌΠ΅ΡΡΠ²ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΡΠΏΡΡΡΠΈΡΡ ΠΌΡΡΡΠ΅ΠΊΡ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠ°).
Π ΠΠ‘ QNX Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°Π±ΠΎΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ POSIX, β ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΡΡΡΠ΅ΠΊΡ. Π ΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΡΠΎΠΊ, Π²Π»Π°Π΄Π΅ΡΡΠΈΠΉ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π΅Π³ΠΎ Π·Π°Ρ Π²Π°ΡΠ΅, Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ. ΠΡΡΡΠ΅ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΎΠ½ Π±ΡΠ» Π·Π°Ρ Π²Π°ΡΠ΅Π½, ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ (Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ).
ΠΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ <pthread.h>, ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ:
#include <pthread.h>
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΡΡΡΠ΅ΠΊΡΠ° Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΡΡΡΠΊΡΡΡΠ΅ pthread_mutexattr_t, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΠΏΠΎΠΌ sync_attr_t. ΠΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ, ΡΠΎΠ·Π΄Π°Π½Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π΄ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° ΠΌΡΡΡΠ΅ΠΊΡ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
int pthread_mutexattr_init(const pthread_mutexattr_t* attr);
Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ attr. Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ pthread_mutexattr_t ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ <pthread.h> (ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ ΡΠΈΠΏΠ° sync_attr_t, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ <target_nto.h>) ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
struct _sync_attr_t {
int protocol;
int flags;
int prioceiling;
int clockid; /* ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ condvar */
int reserved[4];
};
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ Π³ΡΡΠΏΠΏΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°
int pthread_mutexattr_setprioceiling(
pthread_mutexattr_t* attr, int prioceiling);
int pthread_mutexattr_getprioceiling(
const pthread_mutexattr_t* attr, int* prioceiling);
ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ/ΡΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΡ, Π·Π°Ρ Π²Π°ΡΠΈΠ²ΡΠ΅ΠΌΡ ΠΌΡΡΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ protocol ΡΡΡΡΠΊΡΡΡΡ pthread_mutexattr_t ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ PTHREAD_PRIO_PROTECT.
ΠΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° (Priority Ceiling Protocol), ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠ΅Π³ΠΎ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΡΠ°ΠΌ, Π³Π΄Π΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΡΡ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠΈΠΉ ΡΠ΅ΡΡΡΡ. Π ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ², ΠΊΠΎΠ³Π΄Π° Π½ΠΈΠ·ΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ΅ΡΡΡΡ, Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π²ΡΡΠ΅ΡΠ½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, Π° ΠΏΠΎΡΠΎΠΊ Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°, Π·Π°Ρ Π²Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ [4], Π³Π΄Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΠ‘ Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΠ‘ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²ΡΡΠ΅ΡΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° (Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°) Π΄ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π°ΠΈΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΈΠ· ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΡΠΎΠΊ Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π½Π΅ Π²ΡΡΠ΅ΡΠ½ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ Π½Π°Π΄Π»Π΅ΠΆΠ°Π»ΠΎ Π±Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π΅Π³ΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, Π° Π±ΡΡΡΡΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ (ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ Π΅Π΅), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ.
Π ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ ΡΠ°ΠΌΡΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² Ρ Π½ΠΈΠ·ΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ β ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ. Π ΡΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π²ΡΡΠ΅ΡΠ½Π΅Π½Π½ΡΡ ) Π²ΡΡΡΡΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΌ. ΠΠΎ ΡΠΎΠ³Π΄Π° Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΡΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΡΠ΅ΡΠ½Π΅Π½ΠΈΡ (Β«ΠΏΠΎΡΡΡΡΠ½ΠΎΒ») ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π½Π΅ Ρ Π²Π°ΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΠΏΠΎΠΊΠ° ΠΠ‘ Π±ΡΠ΄Π΅Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ².
ΠΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°. Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠΈΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎ ΠΌΡΡΡΠ΅ΠΊΡ) Π½Π°Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°, Π·Π°Ρ Π²Π°ΡΠΈΠ²ΡΠ΅Π³ΠΎ ΡΡΠΎΡ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π΄ΠΎ ΠΏΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° ΠΌΡΡΡΠ΅ΠΊΡΠ°.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π·Π°ΡΠΈΡΡ ΠΎΡ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ²
int pthread_mutexattr_setprotocol(