-
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을 하여 초기화가 필요하다.소스코드
123456789101112131415161718192021222324252627282930313233343536373839404142#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>// thread functionvoid *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 *)#}int main(){pthread_t pthread;pthread_attr_t attr;int thr_id;int status;int a = 10000;// Thread detach// PTHREAD_CREATE_DETACHEDpthread_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 실행결과
1rojae 6443 0.0 0.0 80424 1072 pts/0 S+ 01:45 0:00 ./pthread_attrcs detach() 한 것 처럼
자원이 반납된 것을 알 수 있다.
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍' 카테고리의 다른 글
sscanf와 sprintf에 대해서 알아보자 (0) 2019.06.04 pthread_mutex_init (뮤텍스 사용하기!) (0) 2019.05.25 pthread_cleanup_pop, pthread_cleanup_push (0) 2019.05.25 thread_exit(쓰레드에서 특정 값을 return을 시키자) (0) 2019.05.25