개발자_이훈규
천천히, 빠르게. 개발자의 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
  • Example
  • 설명
  • 코드
  • 예제
  • 에러
  • Python
  • C++
  • Java
  • C
  • ubuntu
  • 설치
  • 우분투
  • 소스
  • 라즈베리 파이
  • error
  • GIT
  • install
  • 방법
  • 개발

최근 댓글

최근 글

티스토리

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

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

소프트웨어

[c++] pthread의 detach란...

2014. 2. 4. 11:39

1.

pthread_join을 사용하다가 join보다 더 괜찮은 것이 있다는 소식을 듣게 되었다.

그 이름은 'detach' 

detach는 thread가 할일이 끝나면 알아서 자원을 해제하고 없어진다고 한다.

이것이 되는 근본적인 바탕은 detach 옵션을 주면 main thread와 sub thread가 분리되서 sub thread가 죽으면 그냥 해제되는 것이라고 한다.



2. 

사용하는 방법은 2가지가 존재한다.

detach를 thread create하기 전에 설정할 것이냐, create한 후에 할 것이냐.

어떤것을 하던지간에 해제되긴 하지만 논리 순서상 깔금한 것은 pthread가 생성되기 전에 선언하는 것이다.



3. 

두가지의 사용 방법.


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

( copy : http://devkyu.tistory.com/entry/%ED%8E%8C-pthread-%EC%9E%90%EC%9B%90-%ED%95%B4%EC%A0%9C%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0pthreaddetach-pthreadattrsetdetachstate )



4.

pthread를 생성하기 전에 설정하는 방법으로 여러개의 pthread를 생성할 때 pthread_attr_t가 어떻게 동작하는지 모르기 때문에 그것을 찾기로 한다.



5.

여러개의 thread를 생성할 때  pthread_attr_t 를 하나만 만들어서 여러개의 thread를 생성할 때 공유하게 설정해준다.

예제 소스는 아래와 같다. (이 사람은 이걸 알고 썼겠지.. 싶은데.. )

(http://stackoverflow.com/questions/10316266/single-threaded-and-multi-threaded-code-taking-the-same-time)




#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#include <boost/progress.hpp>

#define SIZEEXEC 200000000

using namespace boost;
using std::cout;
using std::endl;

typedef struct t_d{
   int  intArg;
} Thread_data;

void* function(void *threadarg)
{
    Thread_data *my_data= (Thread_data *) threadarg; 
    int size= my_data->intArg;

    int i=0;
    unsigned rand_state = 0;
    for(i=0; i<size; i++) rand_r(&rand_state);
    return 0;
}

void withOutThreads(void)
{
    Thread_data* t1= new Thread_data();
    t1->intArg= SIZEEXEC/3;
    function((void *) t1);

    Thread_data* t2= new Thread_data();
    t2->intArg= SIZEEXEC/3;
    function((void *) t2);

    Thread_data* t3= new Thread_data();
    t3->intArg= SIZEEXEC/3;
    function((void *) t3);    
}

void withThreads(void)
{
    pthread_t* h1 = new pthread_t;
    pthread_t* h2 = new pthread_t;
    pthread_t* h3 = new pthread_t;
    pthread_attr_t* atr = new pthread_attr_t;

    pthread_attr_init(atr);    
    pthread_attr_setscope(atr,PTHREAD_SCOPE_SYSTEM);

    Thread_data* t1= new Thread_data();
    t1->intArg= SIZEEXEC/3;
    pthread_create(h1,atr,function,(void *) t1);

    Thread_data* t2= new Thread_data();
    t2->intArg= SIZEEXEC/3;
    pthread_create(h2,atr,function,(void *) t2);

    Thread_data* t3= new Thread_data();
    t3->intArg= SIZEEXEC/3;
    pthread_create(h3,atr,function,(void *) t3);

    pthread_join(*h1,0);
    pthread_join(*h2,0);
    pthread_join(*h3,0);
    pthread_attr_destroy(atr);
    delete h1;
    delete h2;
    delete h3;
    delete atr;
}

int main(int argc, char *argv[])
{
    bool multThread= bool(atoi(argv[1]));

    if(!multThread){
        cout << "NO THREADS" << endl;
        progress_timer timer;
        withOutThreads();
    }
    else {
        cout << "WITH THREADS" << endl;
        progress_timer timer;
        withThreads();
    }

    return 0;
}

 



6.

일단 더 찾아봤다.

( http://docs.oracle.com/cd/E19455-01/806-5257/attrib-69011/index.html )



7.

5번 소스는 detachable한 thread는 joinable하지않는다는 말에 의해서 join을 제외하고 실험 하면서 적용하기록 결정.


끝.


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

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

[c++] mutex, 그는 자신이 걸어 놓은 lock을 통과할 수 있을까?  (0) 2014.02.05
[c언어] 데이터 영역을 설명한 포스트입니다. 재미있네요ㅎㅎ  (0) 2014.02.05
[펌] pthread 자원 해제에 대한 이야기(pthread_detach, pthread_attr_setdetachstate)  (0) 2014.02.04
[c++] fwrite의 thread-safety란  (0) 2014.02.03
[c++] 변수 선언에 대해서  (0) 2014.01.29
    '소프트웨어' 카테고리의 다른 글
    • [c++] mutex, 그는 자신이 걸어 놓은 lock을 통과할 수 있을까?
    • [c언어] 데이터 영역을 설명한 포스트입니다. 재미있네요ㅎㅎ
    • [펌] pthread 자원 해제에 대한 이야기(pthread_detach, pthread_attr_setdetachstate)
    • [c++] fwrite의 thread-safety란
    개발자_이훈규
    개발자_이훈규
    혼자 꽁양꽁양 개발하면서 놀아요~ - 노트같은 블로그

    티스토리툴바