부모 쓰레드에서 detached 된 자식 쓰레드들의 종료 기다리기
글쓴이: 숲으로 / 작성시간: 화, 2006/08/08 - 5:08오후
부모 쓰레드에서 detached 된 자식 쓰레드들이 모두 종료하길 기다렸다가
부모자신도 종료되게끔 구현하고자 합니다.
일단 block 이든, non-block 이든, 비동기든 상관은 없습니다.
제가 구현한 벙법은
자식 쓰레드들에서 종료직전에 부모에게 pthread_kill()로 시그널을 보내주면
부모가 이를 받아서 모든 자식이 시그널을 보냈다 싶음 자신도 종료하는 방식인데요.
부모가 기다리기위해서는 while루프를 돌며 sigwait() 나, 비동기적으로 sigaction() 을 써서 구현해 봤습니다.
그런데 간혹 일부 자식으로부터 시그널을 받지 못하는 경우가 발생합니다.
아니 정확히는, 한 자식으로부터 온 시그널을 처리하는 동안 또다른 자식으로부터 시그널이 도착하면
인식하지 못하는 듯 합니다.
모든 자식의 시그널을 완벽히 받아 처리할 수 있는 방법이 없을까요?
혹은 꼭 시그널을 이용하지 않더라도 가능한 방법은 없습니까?
Forums:
pthread_join() 이요?
pthread_join() 이요? (detach하지 말아야 하지만...)
Real-time signal handler가 어떨런지요
설령 signal을 무시하거나 블록시키지 않아도
signal이 pending된 상태에서 다시 동일 시그널이 올경우 늦게 도착한 넘은
그대로 버려집니다.
즉 (보낸 시그널 수 != 받는 시그널 수)
이걸 해결하기 위해 만든게 Real-time signal 입니다.
그 방법 외에
현재 자식 쓰레드 수를 카운트하는
전역 변수를 하나 만들고 그 전역변수가 zero로 떨어지는 순간
(물론 동기화를 위해 MUTEX를 사용하고)
exit()를 하면 간단하지 않을까요?
/***************************************
Being the one is just like being in love.
***************************************/
main 쓰레드에서 모든
main 쓰레드에서 모든 작업을 마친 후 pthred_exit()을 호출하면 됩니다. 그럼 나머지 모든 쓰레드가 종료할때까지 프로그램이 종료되지 않습니다.
음.. 질문을 다시보니 부모 쓰레드가 main 쓰레드가 아닐수도 있겠군요. 그러면 안될텐데..
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
댓글 달기