채록채록
[Linux\SystemProgramming] pthread_create, pthread_join, pthread_detach 본문
현장실습 중인 회사에서 개발중인 제품에 들어갈 프로그램의 구조에 대해 공부해보던 중, 스레드와 프로세스, 자원관리, 비동기적 처리 등등의 중요성을 깨닫게 되었다. 그래서 리눅스시스템프로그래밍 강의와 실습자료를 다시 보면서 공부중이다.
그런데 문득 pthread_create을 했으면 왜 꼭 pthread_join으로 기다려줘야하는가 하는 궁금증이 생겨 챗지피티에게 물어보았고 나름 생각을 하면서 봐야할 부분인 것 같아 정리해보는 글.
- pthread_join의 역할
- pthread_join은 호출된 스레드가 종료될 때까지 호출한 스레드를 block한다.
- 스레드가 종료되면 pthread_join은 그 스레드의 반환값을 가져오고, 자원을 정리한다.
- 종료된 스레드의 자원이 즉시 해제되지 않고/ 혹은 detach상태로 전환되지 않게 되면 스레드는 좀비상태로 남아있다.
- 메모리 누수의 원인이 된다.
- pthread_join을 사용해야하는 경우
- 메인스레드가 특정 스레드의 작업이 완료될 때까지 기다려야하는 경우
- 스레드가 종료될 때 자원을 해제해야하는 경우
- pthread_join을 사용하지 않아도 되는 경우
- 생성된 스레드가 독립적으로 작업을 수행하는 경우 = 다른 스레드와의 동기화가 필요 없는 경우
- ex : 스레드가 백그라운드에서 계속 동작하며 메인 프로그램의 종료와 관계없이 계속 실행되어야하는 경우
- 생각해보니 좀비상태로 남는 것도 가능하다면 메인 프로그램이 죽는 것에 반드시 종속되지 않는다는 뜻이다. 그럼 tid만 기억했다가 메인 프로그램이 다시 살아나서 그 tid를 통해 스레드를 또 관리해주면 되지 않나...?
- 라고 생각했는데 생각해보면 그렇게 코드를 짜는게 더 복잡하고 어려울 것 같다 ㅎㅋ... 말로는 안쉬운게 어딨냐
- ex : 스레드가 백그라운드에서 계속 동작하며 메인 프로그램의 종료와 관계없이 계속 실행되어야하는 경우
- pthread_detach를 이용하여 스레드를 생성할 때부터 분리된 상태로 만든다면, 그 스레드는 종료 시 자동으로 자원을 정리한다.
- 생성된 스레드가 독립적으로 작업을 수행하는 경우 = 다른 스레드와의 동기화가 필요 없는 경우
'Linux' 카테고리의 다른 글
[Linux\Kernel] 오제이 한국에서 제일 쉬운 리눅스커널 강의, 나는 지금 까지 무엇을 한 것인가 (0) | 2024.11.27 |
---|---|
[Linux/Debian] debian fin, ubuntu start (0) | 2024.08.18 |
[Linux\Debian] kernel configuration is invalid오류, linux-headers (0) | 2024.05.14 |
[Linux\Debian] strace설치 (0) | 2024.05.13 |
[Linux\Debian] firefox, Chrome설치, wget, apt install (0) | 2024.05.13 |