개발자_이훈규
천천히, 빠르게. 개발자의 Repository
개발자_이훈규
전체 방문자
오늘
어제
  • 분류 전체보기 (473)
    • 티스토리 (4)
    • 개발자 뉴스 (2)
    • 소프트웨어 (203)
      • C (7)
      • c++ (25)
      • Objective-C (3)
      • Do it! 반응형 웹디자인 (4)
      • openGL (8)
      • Java (24)
      • Jni (3)
      • Android (9)
      • Wordpress (2)
      • 버그 만난 후 느낀점 (2)
      • Git (3)
      • node js (2)
      • window tablet (1)
      • HTML (3)
      • javascript (3)
      • perl (1)
      • AngularJS (0)
      • JSON (0)
      • Docker (3)
      • python (5)
      • jQuery (1)
      • MFC (4)
      • cocos studio (6)
      • Golang (1)
      • SQLite3 (0)
      • Spring Boot (8)
      • thymeleaf (0)
      • Django (0)
      • iOS (3)
      • skia (0)
      • VBA (0)
      • PHP (2)
      • Oracle (1)
      • JSP (0)
      • R (0)
    • TCP IP (2)
    • 금융 (0)
      • 금융 Study (0)
      • 금융 Archive (0)
      • 금융 Article (0)
    • 개인 프로젝트 (7)
      • gif 홈페이지 만들기 (0)
      • study app만들기 (0)
      • 크롤러 만들기 (1)
      • 카툰 홈페이지 만들기 (1)
      • 외주 홈페이지 만들기 (3)
      • 웹 홈페이지 만들기 (0)
      • 미디어 서버 만들기 (0)
      • 소개팅 어플 만들기 (0)
      • 인스타그램 풀스택 클론 코딩(인강 노트) (0)
      • 주식 모의거래 만들기 (1)
    • html php mysql (0)
    • node.Js (2)
    • 일상 (2)
    • 빈공간 uml 공부 (0)
    • Ubuntu(linux) (12)
    • 맥OS (10)
      • android 설치하기 (2)
    • Programming quizzes (0)
    • IoT (구 유비쿼터스) (16)
      • 라즈베리 파이 (11)
      • 아두이노 (5)
    • 하드웨어 (5)
      • 아수스 비보탭 노트8 asus vivotap no.. (2)
      • 크레마 카르타 (3)
    • 분석할 문장, 구문, 코드 (0)
    • 키보드 (1)
      • 해피해킹 (1)
    • 코드 라이언 (0)
    • 전자기기 (4)
    • Ted (0)
    • NAS (0)
    • 알고리즘 (0)
    • 연합인포맥스 (0)
    • 이벤트 응모함 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 예제
  • 개발
  • CODE
  • 설명
  • C++
  • 우분투
  • ubuntu
  • 방법
  • install
  • 코드
  • GIT
  • 설치
  • 소스
  • Python
  • 라즈베리 파이
  • error
  • Java
  • C
  • Example
  • 에러

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자_이훈규

천천히, 빠르게. 개발자의 Repository

소프트웨어

[펌] pthread 자원 해제에 대한 이야기(pthread_detach, pthread_attr_setdetachstate)

2014. 2. 4. 11:20

(http://www.morenice.kr/75)


pthread 자원 해제에 대한 이야기(pthread_detach, pthread_attr_setdetachstate)

2012/01/11 00:25
 
일반적으로 pthread_create를 통해서 쓰레드가 생성되고 다 사용된 쓰레드는 해당 쓰레드를 호출한 곳에서 pthread_join을 통하여 해당 쓰레드의 자원을 해제하여 종료하는 흐름을 갖습니다. 만약 생성된 쓰레드를 pthread_join으로 처리하지 않는다면 아무리 쓰레드가 종료되었다고 해도 자원이 반환되지 않습니다. 이렇게 남겨진 자원은 메모리릭으로 간주되기 때문에 pthread_join은 쓰레드간의 동기작업과 자원 해제를 위해 필수적입니다.

하지만 pthread_join을 하지 않고도, 생성된 쓰레드가 종료될 때 알아서 자원을 시스템에게 반환하는 detach 옵션이 있습니다.

말그대로 독립적으로 운용하게 하라라는 의미로 생각되며(물론 자원적인면에서만), detach 옵션을 주는 방법은 두가지가 있습니다. 


첫번째로,  pthread_create할 때, 생성될 쓰레드 속성값에 detach를 설정하여 새로 생성될 쓰레드는 독립적으로 자원을 해제하도록 하게 할 수 있습니다. 

 #include <pthread.h>

 int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
 int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);


아래와 같이 pthread_attr_t에 detach 옵션을 먼저 설정하고, 쓰레드를 생성하는 시점인 pthread_create에 설정된 pthread_attr_t를 인자로 넘겨주어 detach로 쓰레드가 생성되도록 합니다.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pthread_t thread;
pthread_attr_t attr;
 
if( pthread_attr_init(&attr) != 0 )
  return 1;
 
if( pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0 )
  return -1;
 
if( pthread_create(&thread,&attr, &test_thread, NULL ) != 0 )
  return -1;
 
if( pthread_attr_destroy(&attr) != 0 )
  return -1;
 
/*
 * while (1)
 * {
 *  main thread logic...
 * }
 */


두번째는
, 이미 생성된 쓰레드에게 detach 옵션을 주어 독립적으로 자원을 반환 하도록 하는 방법입니다.

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



아래와 같이 thread를 생성 한 후에 detach 옵션을 줄 수 있습니다. 
?
1
2
3
4
if( pthread_create(&thread,&attr, &test_thread, NULL ) != 0 )
  return 1;
 
pthread_detach(thread);


이 옵션을 몰랐을 때는, pthread_join을 해주는 쓰레드를 만들어서 모든 쓰레드를 모니터링을 하게 해야 해나 하는 구상까지 했었는데 간단하게 해결할 수 있는 문제더군요.

참고적으로 첫번째 방법을 추천드립니다. 쓰레드의 속성을 운용중에 변경되는것은 로직상의 혼란을 줄 수 있고, 거의 그럴일은 없겠지만 detach 옵션을 주기전에 이미 해당 쓰레드가 끝나버릴 수도 있을 가능성이 있기 때문입니다.

- See more at: http://www.morenice.kr/75#sthash.Nhp4udj5.dpuf


저작자표시 비영리 (새창열림)

'소프트웨어' 카테고리의 다른 글

[c언어] 데이터 영역을 설명한 포스트입니다. 재미있네요ㅎㅎ  (0) 2014.02.05
[c++] pthread의 detach란...  (0) 2014.02.04
[c++] fwrite의 thread-safety란  (0) 2014.02.03
[c++] 변수 선언에 대해서  (0) 2014.01.29
[c++] const char vs char 비교 실험  (0) 2014.01.28
    '소프트웨어' 카테고리의 다른 글
    • [c언어] 데이터 영역을 설명한 포스트입니다. 재미있네요ㅎㅎ
    • [c++] pthread의 detach란...
    • [c++] fwrite의 thread-safety란
    • [c++] 변수 선언에 대해서
    개발자_이훈규
    개발자_이훈규
    혼자 꽁양꽁양 개발하면서 놀아요~ - 노트같은 블로그

    티스토리툴바