쓰레드 종료 관련 질문입니다.
음... 조금 찾아봤는데, 확실한게 안 보여서 질문합니다.
리눅스에서 , pthread_create()로 생성한 thread를 종료시킬 때,
pthread_exit(), pthread_cancel(), pthread_join(), pthread_detach() 에 관한 질문입니다.
1.만일 main()에서 pthread_create()로 생성한 thread를 종료시킬 때, 생성된 thread에서 pthread_exit()를 불러서 종료된다면 main()에서 pthread_join()을 다시 불러 줘야 되나요? (=pthread가 사용한 자원이 모두 해제되나요?)
1-1. 즉, 제가 이해하고 있는 건,
pthread_join()이나 pthread_detach()는 생성한 thread를 종료할 때 thread로 실행한 함수 안에서 thread_exit()를 call하지 않았을 때만 쓰는 걸로 알고 있거든요. 이거 제대로 이해하고 있는 건가요?
2. 바꾸어 말하면, pthread_create()로 생성한 thread를 종료할 때
2-1. 아무것도 안하고 thread가 부른 함수가 끝나게 냅두면( pthread_exit() 도 안 부르고, pthread_join()도 안 부르고... -_-; ), 리소스가 남아 있고.
2-2. main()에서 pthread_join()을 불러주고, thread로 부른 함수에서 암것도 안하면, 리소스 해제되서 깨끗이 종료되고.
2-3. main()에서 pthread_join()이나, pthread_detach()를 안 해도 thread로 불리운 함수에서 pthread_exit()를 불러주면, 역시나 리소스 해제되서 깨끗이 종료되고,
2-4. pthread_detach()를 쓰면, main()에서 pthread_detach()를 부른 시점에서 thread는 삭제되며, 리소스도 깨끗해 진다. 이때 thread로 불리운 함수가 pthread_exit()를 불렀던 안불렀던 상관없이, thread가 사용한 자원은 반환한다.
뭐...간단히 말하면, thread를 종료할 때 pthread_exit()만으로 충분한가, 혹은 pthread_exit() + pthread_join() or pthread_detach() 로 가능한가 하는 질문입니다.
그리고, pthread_cancel()의 개념이 안 서는데요,
만일 실행중인 스레드를 죽일라구 한다면, pthread_detach() 나 pthread_kill()로 죽이면 안 되는 건가요? pthread_cancel()이 아니면 프로세스가 생성한 모든 thread가 같이 죽어버린다는 내용을 검색에서 찾아서요.
책보고 대충 짜보고 검색 뒤져봤더니, 개념은 알겠지만 실제 써먹을 때 미묘한 부분을 확실히 모르니 문제가 되네요. 아시는 분 조언 부탁드립니다.
좋은 하루 되세요. =.=
exit()해도 join() 해야
exit()해도 join() 해야 합니다.
join()의 생활화~ 또는 detach()의 생활화~
또한 쓰레드를 죽일때는 스스로 죽게해야 함이 마땅합니다. 죽을 자리는 죽을 쓰레드가 판단하도록 코딩의 생활화~
(검색... 다시해보심이 좋을듯 합니다.)
검색으로 찾은 자료는 방대하나 쓸만한 내용을 찾는 것은 역시나 어렵다.
댓글 달기