Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΈ ΡΠ»Π°Π³, ΠΈ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. Π ΡΡΠ°ΡΡΡΡ, Π² Linux ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ. ΠΡΠ±Π°Ρ ΡΠΈΠ³Π½Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π³ΠΎΠ½ΠΊΠΈ. ΠΠ°ΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ:
β Π ΡΠΈΠΊΠ»Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π°.
β ΠΡΠ»ΠΈ ΡΠ»Π°Π³ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
β ΠΡΠ»ΠΈ ΡΠ»Π°Π³ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°.
ΠΡΡ ΡΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΡΠ΅ΡΡΠ΅ΠΌ ΡΡΠ°ΠΏΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Linux ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π² ΡΠ΅ΠΆΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
Π‘ΠΈΠ³Π½Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ pthread_cond_t. ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ. ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ.
β Π€ΡΠ½ΠΊΡΠΈΡ pthread_cond_init() ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ. ΠΠ΅ΡΠ²ΡΠΉ Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° pthread_cond_t. ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ (ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ) ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ Π² Linux. ΠΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΎΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.4.2, "ΠΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ".
β Π€ΡΠ½ΠΊΡΠΈΡ pthread_cond_signal() ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π°. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅Ρ, ΡΠΈΠ³Π½Π°Π» ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° pthread_cond_t.
ΠΠΎΡ ΠΎΠΆΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ pthread_cond_broadcast() ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°.
β Π€ΡΠ½ΠΊΡΠΈΡ pthread_cond_wait() Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ Π΅Π΅ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π» ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠ΅ΡΠ²ΡΠΌ Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° pthread_cond_t. ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° (ΡΠΈΠΏ pthread_mutex_t).
Π ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ pthread_cond_wait() ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΡΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Ρ Π²Π°ΡΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΅Π΄ΠΈΠ½ΠΎΠΉ "ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ" ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΡΠΈΠ³Π½Π°Π», ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΡΠ°ΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ β ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π°):
1. ΠΠ°Ρ Π²Π°ΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
2. ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ β ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³).
3. ΠΠΎΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π» (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΈΡΠΎΠΊΠΎΠ²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ) ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ.
4. ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.14 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΡΠ»Π°Π³ Π·Π°ΡΠΈΡΠ°Π΅ΡΡΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΈ thread_function() ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ thread_flag. ΠΠ°Ρ Π²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ pthread_cond_wait() ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ, ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΠΈΡΡΠΈΠ½Π³ 4.14. (condvar.c) Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ#include <pthread.h>
int thread_flag;
pthread_cond_t thread_flag_cv;
pthread_mutex_t thread_flag_mutex;
void initialize_flag() {
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. */
pthread_mutex_init(&thread_flag_mutex, NULL);
pthread_cond_init(&thread_flag_cv, NULL);
/* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ»Π°Π³Π°. */
thread_flag = 0;
}
/* ΠΡΠ»ΠΈ ΡΠ»Π°Π³ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
do_work(). Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ. */
void* thread_function(void* thread_arg) {
/* ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ». */
while (1) {
/* ΠΠ°Ρ Π²Π°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ
ΠΊ ΡΠ»Π°Π³Ρ. */
pthread_mutex_lock(&thread_flag_mutex);
while (!thread_flag)
/* Π€Π»Π°Π³ ΡΠ±ΡΠΎΡΠ΅Π½. ΠΠΆΠΈΠ΄Π°Π΅ΠΌ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ»Π°Π³ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½.
ΠΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΠΏΠΎΡΠΎΠΊ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΈ ΡΠ½ΠΎΠ²Π°
ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ»Π°Π³. */
pthread_cond_wait(&thread_flag_cv, &thread_flag_mutex);
/* ΠΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΡΠΈΠΊΠ»Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ. */
pthread_mutex_unlock(&thread_flag_mutex);
/* ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. */
do_work();
}
return NULL;
}
/* ΠΠ°Π΄Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° ΡΠ°Π²Π½ΡΠΌ FLAG_VALUE. */
void set_thread_flag(int flag_value) {
/* ΠΠ°Ρ Π²Π°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π°. */
pthread_mutex_lock(&thread_flag_mutex);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ»Π°Π³ ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅ΠΌ ΡΠΈΠ³Π½Π°Π» ΡΡΠ½ΠΊΡΠΈΠΈ
thread_function(), Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠ»Π°Π³Π°.
ΠΡΠ°Π²Π΄Π°, ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ»Π°Π³, ΠΏΠΎΠΊΠ°
ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½. */
thread_flag = flag_value;
pthread_cond_signal(&thread_flag_cv);
/* ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ. */
pthread_mutex_unlock(&thread_flag_mutex);
}
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌ. ΠΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠΉ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π».
Π‘ΠΈΠ³Π½Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½Π° Π½ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ, Π° ΡΠ»ΡΠΆΠΈΡΡ Π»ΠΈΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ "ΡΠ°Π·Π±ΡΠ΄ΠΈΡ" Π΅Π³ΠΎ. ΠΠ»Ρ ΡΡΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡ. ΠΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡ "Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ" ΡΠΈΠ³Π½Π°Π», Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ» Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½, Π° ΡΠΈΠ³Π½Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π» ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠΎΡΠΎΠΊ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ΅ΠΌΠ°ΡΠΎΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_cond_broadcast() ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ².
4.4.7. ΠΠ·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π²ΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠ·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) ΠΏΠΎΡΠΎΠΊΠ° Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ, Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ A ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π² ΠΏΠΎΡΠΎΠΊΠ΅ Π, Π° ΠΏΠΎΡΠΎΠΊ Π, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΆΠ΄Π΅Ρ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΡ ΠΏΠΎΡΠΎΠΊΠ° Π, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΡΠΏΠΈΠΊΠΎΠ²Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ. ΠΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΠ»Π΅Ρ ΡΠΈΠ³Π½Π°Π» Π΄ΡΡΠ³ΠΎΠΌΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π³ΡΡΠΏΠΏΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π½Π°Π±ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π²Π° ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½ΠΎΡΠΎΠΊ Π Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΅ΠΌΠ°ΡΠΎΡ 1, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡ 2, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ Π Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅ Π·Π°Ρ Π²Π°ΡΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° 1 ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ Π, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Ρ Π²Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊ 2. ΠΠ°Π»Π΅Π΅ ΠΎΠ±Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠΊΠ°ΠΆΡΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°ΠΌ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, Π½ΠΎ ΠΈ ΡΡΠ΄Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΡΠ°ΡΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π½ΠΎ Π² ΡΠ°Π·Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΡ ΠΎΠ΄ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠ°Ρ .
4.5. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² Linux
ΠΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΡ POSIX, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Linux Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π΄ΡΡΠ³ΠΈΡ Π²Π΅ΡΡΠΈΠΉ UNIX. Π‘ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Linux ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ pthread_create(), ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ fork(). ΠΠ½, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΄Π΅Π»ΠΈΡ ΠΎΠ±ΡΠ΅Π΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ ΡΠ΅ΡΡΡΡΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, Π° Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ.
Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° thread-pid, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.15. ΠΠ½Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ getpid() ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠΆΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠ±Π° ΠΏΠΎΡΠΎΠΊΠ° Π²Ρ ΠΎΠ΄ΡΡ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ».