본문 바로가기

programmer/Programming

Pthread 개념 및 예제

pthead에 대한 개념 설명 및 예제는 사실 '이곳'에 너무 잘 정리되어 있어서 따로 정리를 하지 않으려다가. 적용하면서 겪었던 애로 사항들을 정리하기로 했다.

Pthread 사용 방법 구분

Main thread에서 새로운 Thread를 생성할 때 생성된 Thread의 종료 여부를 관리하는 detach, join 방법이 있다.

pthread_detach

메인 thread와 상관 없이 별개의 thread를 생성하고 싶을 때 사용된다. 생성된 thread의 종료 여부는 관심이 없다. 단 주의해야 할 점은 메인 thread에서 생성된 thread라면 maint thread가 종료되는 시점에 생성된 thread도 종료되므로 이를 해결하기 위해서는 pthread_join을 사용해야 한다.

만약 메인 thread는 지속적으로 while문을 실행하고 있고 thread를 생성한다면 문제없이 작동하므로 각 설정에 대한 개념을 이해하고 넘어가야 한다.

 

 

    pthread_create(&s_id, NULL, handle_server, (void*)&port);
    printf("server thread를 생성하던 말던 그냥 Mainthread 종료시켜버림 ");
    pthread_detach(s_id);

 

pthread_join

pthread_join은 pthread_create 이후 생성된 thread가 종료될 때까지 기다린다. Mainthread로 돌아와 꼭 마지막 작업을 해야 하는 경우(예: 파일 입출력, socket, 메모리 할당 등등) 사용될 수 있다.

 

    pthread_create(&s_id, NULL, handle_server, (void*)&port);
    printf("server thread를 생성하고 대기 ");
    pthread_join(s_id, &thread_return);

 

Pthread 빌드 방법

gcc 컴파일러 사용 시

gcc pthread.c -pthread -o pthread

QTcreator 사용 시

QMAKE_CXXFLAGS += -std=c++0x -pthread
LIBS += -pthread

.pro 파일에 상기 라인 추가

 

 

thread 사용시 가장 문제가 되는 부분은 공용 메모리(변수)를 사용하게 되면 thread가 자기들 맘대로 읽거나 쓰기 때문에 공용변수에 대한 접근 권한을 제한하도록 셋팅할 수 있는대 이를 mutex라고 한다. 처음 들어보면 어렵지만 한번 이해하고나면 금방 사용할 수 있다. 

mutex사용 예와 설명은 다음에..

반응형
사업자 정보 표시
라울앤알바 | 장수호 | 서울특별시 관악구 봉천로 13나길 58-10, 404호(봉천동) | 사업자 등록번호 : 363-72-00290 | TEL : 010-5790-0933 | Mail : shjang@raulnalba.com | 통신판매신고번호 : 2020-서울관악-0892호 | 사이버몰의 이용약관 바로가기