ΠΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΡΡΡΠ΅ΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. Π’Π°ΠΊΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΠΎΡΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΠΈΠ· ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ (ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΎΠ±ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°).
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΡΠ°ΡΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ: Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΈ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΌΡΡΡΠ΅ΠΊΡ. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ β ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ-Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ Π»ΠΈΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (ΠΏΡΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ°). ΠΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΡΠ·Π°Π½Π° Ρ Β«ΡΠ΅Π½ΠΎΠΉΒ» Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ-ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ°, Π° Π½Π΅ Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΠ· Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡΠ½ΡΠ΄Ρ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π΅ Π²Π°ΠΆΠ½Π°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ°Π½Π΄Π΅Π²Ρ (Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ), ΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½Π°. Π¦Π΅Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π½Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π·Π°ΡΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΌΡΡΡΠ΅ΠΊΡΠ°.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΡΠ»ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ Π·Π°Ρ Π²Π°Ρ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠ° ΠΎΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΎ ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ, ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Β«ΡΠ±ΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄ΡΒ» ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π» ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠ² ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π» Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΠΎΠΏΡΠΎΡΡ ΡΠ°Π²Π½ΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΠΌΠΎΠΉ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½ΠΎΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΠΎΠΌΡ ΠΆΠ΅, ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
ΠΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΡΠΈΠΌΠΈΡΠΈΠ²Ρ (Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ) ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Β«ΡΠ²ΠΎΠ΅Π³ΠΎΒ» ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΡ, ΡΡΠΈΡΠ°ΡΡΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ. ΠΡΠ±ΠΎΡ ΡΡΠ΅Π΄ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π° Π½Π΅ ΠΎΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Ρ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠ΅ΠΉ Π½Π΅ΠΊΠΈΠΉ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ (ΠΈΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, FIFO-Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π° ΠΈΠ»ΠΈ ΡΡΠ΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ²). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ (ΠΏΠΎΡΠΎΠΊΠΈ) Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΡ pthread_cond_timedwait () ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠ΅ΡΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
(void) pthread_mutex_lock (&t. mn);
t.waiters++;
clock_gettime (CLOCK_REALTIME, &ts) ;
ts.tv_sec += 5;
rc = 0;
while (! mypredicate (&t) && rc == 0)
rc = pthread_cond_timedwait (&t.cond, &t.mn, &ts);
t.waiters--;
if (rc == 0) setmystate (&t);
(void) pthread_mutex_unlock (&t.mn);
ΠΠ±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ Π±Ρ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π±ΡΠ»ΠΎ Π·Π°Π΄Π°Π½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΡΠ΄Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΊΠΎΠΌΡ ΠΊΠΎΠ»Ρ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°ΠΏΡΡΠΊΠΎΠ² Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΡΡΠ°Π½Π΅Ρ ΠΈΡΡΠΈΠ½Π½ΡΠΌ ΠΈΠ»ΠΈ ΠΈΡΡΠ΅ΡΠ΅Ρ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
ΠΡΠ΄ΡΡΠΈΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
ΠΡΡΡΡΡΡΠ²ΡΡΡ.
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅
pthread_cond_signal (), pthread_cond_broadcast (), ΡΠΎΠΌ Base Definitions ΡΡΠ°Π½Π΄Π°ΡΡΠ° IEEE Std 1003.1-2001, <pthread.h>.
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π²ΡΠΏΡΡΠΊΠ΅ Issue 5. ΠΠΊΠ»ΡΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ POSIX Threads Extension.
Issue 6
Π€ΡΠ½ΠΊΡΠΈΠΈ pthread_cond_timedwait() ΠΈ pthread_cond_wait() ΠΎΡ ΠΌ Π΅ΡΠ΅Π½Ρ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΎΠΏΡΠΈΠΈ Threads.
Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ pthread_cond_wait () Π±ΡΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ Open Group Corrigendum U021/9.
ΠΠ»Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ IEEE Std 1003.1j-2000 ΡΠ°Π·Π΄Π΅Π» Β«ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅Β» Π±ΡΠ» ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΈ Clock Selection.
Π ΡΠ°Π·Π΄Π΅Π» Β«ΠΡΠΈΠ±ΠΊΠΈΒ» Π²Π½Π΅ΡΠ΅Π½ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ [EPERM] Π² ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ IEEE PASC Interpretation 1003.1Ρ #28.
Π ΡΠ΅Π»ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ISO/IEC 9899: 1999 Π² ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ ΡΡΠ½ΠΊΡΠΈΠΉ pthread_cond_timedwait() ΠΈ pthread_cond_wait() Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ restrict.
pthread_condattr_destroy, pthread_condattr_init
ΠΠΌΡ
pthread_condattr_destroy, pthread_condattr_init β ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ ΠΌ Π΅Π½Π½ΠΎΠΉ.
Π‘ΠΈΠ½ΠΎΠΏΡΠΈΡ
THR
#include <pthread.h>
int pthread_condattr_destroy (pthread_condattr_t *attr);
int pthread_condattr_init (pthread_condattr_t *attr);
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π€ΡΠ½ΠΊΡΠΈΡ pthread_condattr_destroy() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. Π ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ pthread_condattr_destroy() ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π°Π΄ΡΠ΅ΡΡΠ΅ΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr , ΡΠ°Π²Π½ΡΠΌ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π°Π·ΡΡΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² attr ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΎΠ²Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_condattr_init (); ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_condattr_init () ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ ΠΌ Π΅Π½Π½ΠΎΠΉ attr Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΠΎ Ρ ΠΌ ΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ pthread_condattr_init () Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΆΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² attr , ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ ΠΌ Π΅Π½Π½ΠΎΠΉ ΡΠΆΠ΅ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ ΠΌ Π΅Π½Π½ΡΡ , ΠΡΠ±Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (Π²ΠΊΠ»ΡΡΠ°Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ), Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡΡΠ°Π·ΠΈΡΡΡ Π½Π° ΡΠ°Π½Π΅Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅ ΠΌ Π΅Π½Π½ΡΡ .
ΠΡΠΎΡ ΡΠΎ ΠΌ ΡΡΠ°Π½ Π΄ Π°ΡΡΠ° IEEE Std 1003.1-2001 ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΡ Π΄ Π²ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²: clock ΠΈ process-shared.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_condattr_destroy() Hpthread_condattr_init() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ Π΅Π΅ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ.
ΠΡΠΈΠ±ΠΊΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ pthread_condattr_destroy () ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ:
[EINVAL] Β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π°ttr, Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_condattr_init () Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ:
[ENOMEM] Β Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ [EINTR].
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΡΡΡΡΡΡΠ²ΡΡΡ.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ