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

pthread_attr 사용 (pthread_detach 없이 자원 반납하기)

by RoJae 2019. 5. 25.


개발 환경

 OS

 Ubuntu 18.04.2

 컴파일러

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




 int  pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

PTHREAD_CREATE_JOINABLE
PTHREAD_CREATE_DETACHED 상태로 변경.




pthread_attr_t attr;

// JOINABLE 상태로 변경
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

// DETACHED 상태로 변경
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);





int pthread_attr_init(pthread_attr_t *attr);

pthread_attr_init는 쓰레드 속성 객체인 attr을 초기화.




int pthread_attr_destroy(pthread_attr_t *attr);

pthread_attr에 부여된 속성 값들을 제거한다.
pthread_attr을 다시 부여하기 위해서는 init을 하여 초기화가 필요하다.



소스코드

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
35
36
37
38
39
40
41
42
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<unistd.h>
 
// thread function
void *thread_function(void *data){
        char a[100000];
        static int num = 0;
        num = *((int *) data);
        printf("Thread Start\n");
        sleep(5);
        printf("Thread end\n");
        return (void *)&num;
}
int main(){
        pthread_t pthread;
        pthread_attr_t attr;
 
        int thr_id;
        int status;
        int a = 10000;
 
        // Thread detach
        // PTHREAD_CREATE_DETACHED
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 
        // 위 속성 값을 사용하여 쓰레드를 생성
        thr_id = pthread_create(&pthread, NULL, thread_function, (void *&a);
        if(thr_id < 0){
                perror("쓰레드 생성 오류\n");
                exit(0);
        }
        // 속성 값 삭제
        pthread_attr_destroy(&attr);
 
        pause();
 
        return 0;
}
 
cs





실행결과

1
rojae  6443  0.0  0.0  80424  1072 pts/0    S+   01:45   0:00 ./pthread_attr
cs

detach() 한 것 처럼

자원이 반납된 것을 알 수 있다.


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




반응형

댓글