int pthread_detach(pthread_t thread thread);
ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ 0 , Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅β ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ pthread_detach() Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΆΠ΅ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ, Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ thread, Π½Π΅ Π±ΡΠ» ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°:
pthread_create(&threadA,NULL,taskl,NULL);
pthread_detach(threadA);
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΈΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΠΎΠΊ threadA ΡΡΠ°Π½Π΅Ρ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠΌ. Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ (Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡ detachstate Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
ΠΠ±ΡΠ΅ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΡΠΈ ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ. ΠΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ pthread_attr_t. ΠΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ:
β’Β ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΏΠΎΡΠΎΠΊΠ°;
β’Β ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΏΠΎΡΠΎΠΊΠ°;
β’Β ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ;
β’Β ΡΠΈΠΏ ΠΏΠΎΡΠΎΠΊΠ°: ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΠΉ;
β’Β ΠΎΠ±Π»Π°ΡΡΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠ»Ρ ΡΠΈΠΏΠ° pthread_attr_t ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (ΡΠΌ. ΡΠ°Π±Π». 4.3).
ΠΠ»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_attr_init () ΠΈ pthread_attr_destroy () ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
Π‘ΠΈΠ½ΠΎΠΏΡΠΈΡ
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread attr__t *attr) ;
Π€ΡΠ½ΠΊΡΠΈΡ pthread_attr_init () ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ attr ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° pthread_attr_t. ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ attr-ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π² ΡΠ°Π±Π». 4.3. ΠΠΎΡΠ»Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ attr ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° pthread_create(). ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ 0, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ pthread_attr_init() Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ°ΠΌΡΡΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_attr_destroy() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° pthread_attr_t, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ attr. ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΡΠΎΠΉ ΡΡΠ½ΠΊ Ρ ΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ Π»ΡΠ±ΡΠ΅ ΡΠΊΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠΈΠΌ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ 0, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ - ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠΎΠΊΠ° Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ» Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° detachstate Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ pthread__attr_setdetachstate(). ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ detachstate ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ ΠΊΠ°ΠΊ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΠΉ.
Π‘ΠΈΠ½ΠΎΠΏΡΠΈΡ
#include <pthread.h>
int pthread_attr_setdetachstate(
pthread_attr_t *attr,
int *detachstate
);
int pthread_attr_getdetachstate(
const pthread_attr_t *attr,
int *detachstate
);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ detachstate ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
PTHREAD_CREATE_DETACHED
PTHREAD_CREATE_JOINABLE
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ PTHREAD_CREATE_DETACHED Β« ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΒ» Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π² ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ PTHREAD_CREATE_JΠINABLE β Π² ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΠ΅. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ PTHREAD_CREATE_JOINABLE Π°ΡΡΠΈΠ±ΡΡ detachstate ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ pthread_attr_setdetachstate () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ 0 , Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° detachstate ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ pthread_attr_getdetachstate () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° detachstate Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° detachstate Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ detachstate ΠΈ ΡΠΈΡΠ»ΠΎ 0 ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΡΠΈ Π½Π΅ΡΠ΄Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.2 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΠΊΡΠ΅ΠΏΠ»ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅4.1. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ².
// ΠΠΈΡΡΠΈΠ½Π³ 4.2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ //Β ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
int main(int argc, char *argv[]) {
pthread_t ThreadA,ThreadB;
pthread_attr_t DetachedAttr;
int N;
if(argc != 2) {
cout Β« Β«ΠΡΠΈΠ±ΠΊΠ°Β» << endl; exit (1);
}
N = atoi(argv[1]);
pthread_attr_init(&DetachedAttr);
pthread_attr_setdetachstate(&DetachedAttr,PTHREAD_CREATE_DETACHED);
pthread_create(&ThreadA,NULL, task1, &N);
pthread_create(&ThreadB,&DetachedAttr,task2 , &N);
cout << Β«ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Π.Β» << endl; pthread_join(ThreadA,NULL);
return (0) ;
}
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.2 ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ DetachedAttr, Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ pthread_attr_init(). ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ pthread_attr_detachstate(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ detachstate (Β«ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΠΎΡΡΡΒ»), ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ PTHREAD_CREATE_DETACHED (Β«ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΠΎΡΡΡΒ»). ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° ThreadB Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_create() Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ DetachedAttr. ΠΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ° ThreadB Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ pthread_join() Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΡΠΎΡΡΡΠ·Π°Π½ΠΈΠ΅ Π·Π° ΡΠ΅ΡΡΡΡΡ. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°. ΠΡΠΈ ΡΠ°ΠΊΡΠΎΡΡ Π²Π»ΠΈΡΡΡ Π½Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠΎΠΌΠ΅ Π½ΠΈΡ , ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΡΡΡΠ·Π°ΡΡΡΡ Π·Π° ΡΠ΅ΡΡΡΡΡ: Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π»ΠΈΠ±ΠΎ Π² ΠΌΠ°ΡΡΡΠ°Π±Π΅ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΈ ΠΎΠ±Π»Π°ΡΡΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ΅ΡΡΡΡΡ, Π΄ΠΎΡΡΡΠΏ ΠΊ Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΡ ΡΠ΅ΠΌΡ ΠΌΡ ΠΊΡΠ°ΡΠΊΠΎ Π·Π°ΡΡΠΎΠ½Π΅ΠΌ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎβ Π² Π³Π»Π°Π²Π΅ 5. Π Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΈ ΡΠ°ΠΊΠΈΠ΅: Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΠΈ Π°Π½Π½ΡΠ»ΠΈΡΡΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ.
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΡΠ²Π°Π½ΠΎ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
β’Β Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΡΠ΅ΡΡΠ° Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ ΠΈΠΌ ΡΡΠ°ΡΡΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ (ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ);
β’Β Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°ΡΡΡΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ;
β’Β Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π°Π½Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² ΡΠΎΠΌ ΠΆΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅.
ΠΠ°Π²Π΅ΡΡΠ°ΡΡΡ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° pthread_join() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΡΠ°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_exit(), ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π²ΡΠ·Π²Π°Π½Π° Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΌΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΡΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉΡΡ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°Π»ΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ pthread_exit (), ΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°ΡΡΡΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π²Π΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NULL. [9] ΠΠΎΠ· ΠΌΠΎΠΆΠ½Π° ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠ»ΠΈ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠΎΠΊ Β«ΠΏΠ»ΠΎΡ ΠΎ ΡΠ΅Π±Ρ Π²Π΅Π΄Π΅ΡΒ», ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΡΠΎ ΡΠ°Π΄ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡ. ΠΠ°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉΡΡ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠΎΠ½ΡΠΈΡΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ (ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΡΠΈΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ-Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ°. ΠΠΎΡΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.