POSIX 쓰레드 프로그래밍에 대한 질문입니다.
posix thread는 joinable(non-detached)과 detached 두가지 state가 있는데
(pthread_attr_setdetachstate에 PTHREAD_CREATE_DETACHED를
인자로 설정하여 쓰레드를 pthread_create하는 것과
설정하지 않고 pthread_create)
non-detached로 thread를 생성한 경우는
---------------------------------------
pthread_exit는 non-detached thread에 의해서 사용될 수 있고,
(생성된 thread에서 사용할수 있고)
pthread_exit의 결과는 pthread_join을 통하여 최종적으로 없어지게됨
pthread_join은 non-detached가 종료되기를 기다리기 위해서 호출 될수 있고
pthread_join을 호출하면 메인 thread는 pthread_join에 명시된 thread가 종료할때까지
잠자면서 sleep하게 된다고 합니다.
pthread_join하지 않으면 thread가 사용하던 자원은 그대로 남아 있게 된다.
즉, pthread_join을 호출하면 그 thread가 가진 자원을 모두 free하기 된다.
detached로 thread를 생성한 경우는
---------------------------------------
pthread_detach로 thread를 종료 한다고 하네요
어떤 분은 thread를 분리한다는 표현을 사용하기도 하고
이때의 장점은 detach 시킨 thread가 언제 종료되었는지 알 필요 없고
thread가 종료시 자원을 반환한다는 점이랍니다.
질문 1. detach한다 join(non-detach)한다 의미가 무엇인가요? 어디가 붙여요? 뭘붙여요?
질문 2. pthread_exit는 pthread_join일때만 사용해야 되나요?
질문 3. detached thread 에 pthread_join을 사용하면 안되나요?
질문 4. non-detached thread에 pthread_detached을 사요아면 안되나요? -> main thread가 멈춰버리더라구요
질문 5. pthread_cancel 아무때나 써도 상관 없나요?
대충 정리는 한거 같은데 연결을 못시키는것 같습니다.(자료도 없는거 같고)
아시는분 도움 주시면 감사하겠습니다.
부탁합니다.
수고하세요
댓글 달기