본문 바로가기
C_C++ 프로그래밍

pthread_detach(쓰레드 자원들을 분리시키자)

by RoJae 2019. 5. 25.


개발 환경

 OS

 Ubuntu 18.04.2

 컴파일러

 gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)




pthread_detach(pthread_t thread);

일반적으로는 반납이 되지 않지만,

pthread_join을 사용하면 모든 자원이 쓰레드가 종료되면 반납이 됩니다.

하지만, detach() 한번 detach() 함수를 사용하면 join() 명령을 사용하지 않아도

종료 시에 모두 반납이 됩니다.




소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<pthread.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
 
void *thread_function(void *data){
        char a[1000000];        // 자원 생성    
        static int num = 0;
        num = *((int *) data);
        printf("쓰레드 시작 \n");
        sleep(5);
        printf("쓰레드 끝 \n");
        return (void *&num;   // 자원을 리턴
}
 
int main(){
        pthread_t p_thread;
        int thr_id;
        int status;
        int tmp = 100;
 
        thr_id = pthread_create(&p_thread, NULL, thread_function, (void *&tmp);
 
        if(thr_id < 0){
                perror("쓰레드 생성 에러 \n");
                exit(0);
        }
 
        pthread_detach(p_thread);
        pause();
        return 0;
}
 
 
cs





실행결과

pthread를 사용한 소스코드 컴파일 시 -pthread를 붙여야한다.

gcc -o destfile sourcefile -lpthread(필수)


1
2
3
$ ps -aux | grep pthread | grep -v grep | grep -v vim; sleep 1;
rojae  5989  0.0  0.0  80424  1064 pts/1    S+   01:21   0:00 ./pthread_detach
 
cs

단 하나 Main문만 (pause 상태이기 때문에) 실행 중임을 알 수 있다.


>> 현재 processor의 자원 상태는 별도의 명령어로 확인이 가능합니다. <<



※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다




반응형

댓글