ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • pthread_attr 사용 (pthread_detach 없이 자원 반납하기)
    C_C++ 프로그래밍 2019. 5. 25. 01:51


    개발 환경

     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() 한 것 처럼

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


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




    반응형
Designed by Tistory.