pthread 죽이는법?
글쓴이: cjy1126 / 작성시간: 월, 2003/05/26 - 1:51오후
ping를 pthread로 작성하였습니다.
send와 receive 2개의 쓰레드가 있는데, send가 죽으면서 recvfrom중인 receive 쓰레드를 죽입니다.
문제는 지금까지 pthread_detach 로 죽이는줄알고 썼는데... ping을 여러번 반복하니까 한번보내고 for문에서 돌아가는 수만큼 받네요. -_-;
recvfrom 쓰레드가 계속 살아있어서 그런가 같은데, 어떻게 죽여야하나요?
폴링은 사용하면 안되고, 꼭 block이 되야하거든요.
답변 부탁드리겠습니다.
Forums:
pthread_detach
정확한 상황은 모르겠습니다만,
pthread_detach 함수는 쓰레드를 죽이는 함수가 아니라 쓰레드를 분리시키는 함수입니다. 쓰레드를 "분리시킨다(detach)"는 의미는 해당 쓰레드가 종료되면 그 쓰레드에 사용된 자원은 곧바로 재활용된다는 것을 의미합니다.
다시 말하면, 나는 해당 쓰레드가 언제 종료되든 신경 쓰지 않을 것이고, 그 녀석이 종료될 때의 값을 받아오지 않을 테니까 죽으면 바로 자원을 반환하라는 뜻입니다.
이에 비해 디폴트 상태인 "Joinable(결합 가능)" 상태의 쓰레드는 반드시 pthread_join 함수를 호출하여 명시적으로 결합해야 합니다. 따라서 종료는 했지만, 아직 결합되지 않은 쓰레드는 아직 자원이 시스템으로 완전히 반환되지 않은 것이죠. (마치 좀비 프로세스와 유사합니다.)
결론적으로 어떤 쓰레드를 종료시키려면 pthread_cancel 함수를 사용하여 대상 쓰레드를 "취소"하는 방법을 사용하세요.. 또는 pthread_kill 함수를 사용하여 특정 쓰레드로 시그널을 보내는 방법도 생각할 수 있습니다. 가급적 cancel 메커니즘을 사용할 것을 추천합니다 ^^
pthread_cancel 에 대한 man page를 찾아 보시면 어느 정도 감이 오시지 않을까 합니다.
pthread_detach는 쓰레드를 죽이는게 아니라 쓰레드에서 리턴받을
pthread_detach는 쓰레드를 죽이는게 아니라 쓰레드에서 리턴받을값이 없거나 기다릴필요가없을때 쓰레드를 떼어놓기 위해 사용합니다..
detach해놓으면 해당 쓰레드가 종료되면 자동으로 자원을 반환하게 됩니다..
그리고 외부에서 쓰레드를 죽이는건 좋지않고 조건을 두어서 스스로 자결(?) 하도록 하는게 좋습니다..-_-;
스레드 스스로 일정 조건에 의해서 종료시킬 때 그냥 return NULL
스레드 스스로 일정 조건에 의해서 종료시킬 때 그냥 return NULL 하지 마시고 가급적 pthread_exit() 함수를 사용하시는게 좋습니다.
s(˘∼˘*)z,·´″"`°³о$ √(´∀`√)... (˘ヘ˘ㆀ)a
c++을 사용하신다면.. 아니더라도...
하는 엉뚱한? 방법도 있답니다. ^^;
댓글 달기