pthread_detach

OS/리눅스 & 유닉스 2012. 3. 24. 19:23

pthread_detach

실행중인 쓰레드를 detached(분리)상태로 만든다.

사용법

#include <pthread.h> 
 
int pthread_detach(pthread_t th); 
 

설명

pthread_detach함수는 쓰레드 식별자th를 가지는 쓰레드를 메인쓰레드에서 분리 시킨다. 이것은 th를 가지는 쓰레드가 종료되는 즉시 쓰레드의 모든 자원을 되돌려(free)줄 것을 보증한다. detach상태가 아닐경우 쓰레드가 종료한다고 하더라도 pthread_join(3)을 호출하지 않는 한 자원을 되돌려주지 않는다.

pthread_detach()함수를 호출하는 외에도 pthread_create()시 pthread_attr_t에 detachstate를 지정해 줌으로써 detach상태로 생성할 수 도 있다. pthread_attr_t는 pthread_attr_init(3)함수를 이용해서 변경할 수 있다.

쓰레드가 detach상태로 되었다면 해당 쓰레드에 대한 pthread_join()호출은 실패한다.

반환값

성공하면 0을, 실패하면 0이 아닌 값을 리턴한다.

에러

  • ESRCH
    th식별자를 가진 쓰레드가 존재하지 않는다.
  • EINVAL
    th식별자를 가진 쓰레드가 이미 detach상태에 있다.

예제

#include <pthread.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
 
// 쓰레드 함수 
// 1초를 기다린후 아규먼트^2 을 리턴한다. 
void *t_function(void *data) 
{ 
    char a[100000]; 
    int num = *((int *)data); 
    printf("Thread Start\n"); 
    sleep(5); 
    printf("Thread end\n"); 
} 
 
int main() 
{ 
    pthread_t p_thread; 
    int thr_id; 
    int status; 
    int a = 100; 
 
    printf("Before Thread\n");  
    thr_id = pthread_create(&p_thread, NULL, t_function, (void *)&a); 
    if (thr_id < 0) 
    { 
        perror("thread create error : "); 
        exit(0); 
    } 
    // 식별번호 p_thread 를 가지는 쓰레드를 detach  
    // 시켜준다.  
    pthread_detach(p_thread); 
    pause(); 
    return 0; 
} 
 

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

프로세스 (process)  (0) 2012.04.06
getprocs64  (0) 2012.04.02
nohup  (0) 2012.03.22
awk 변수 shell 변수에 저장  (0) 2012.03.20
awk  (0) 2012.03.20
: