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사용 예와 설명은 다음에..
'programmer > Programming' 카테고리의 다른 글
함수 포인터 사용 예 (0) | 2020.10.22 |
---|---|
원형 큐(circuit queue) 예제 (0) | 2020.10.21 |
C 언어 Bit field 배열- 최소 메모리로 flag 저장하기 (0) | 2020.06.23 |