Thread는 하나의 세그멘트 내에서 동작하므로, 하나의 쓰레드가 죽으면 프로세스 전체가 사망하게 됩니다.
따라서, 멀티 프로세스 프로그램에서 처럼 쓰레드 하나가 죽은 경우 다시 살려주는 것은 별다른 의미가 없는 것으로 보이며, 스스로 return 하는 경우에는 굳이 다른 Thread 에서 기다릴 필요 없이 return 하는 곳에서 종료처리를 해야 할 것으로 보입니다.
그런데 논의되는 내용은 한 thread가 pthread_exit이나 pthread_cancel등의 이유로 terminate되는 경우에 이 thread를 create한 thread(편의상 main thread라고 부르겠습니다.)가 알아차릴 수 있는 방법이 무엇이냐 에 있는것 같습니다.
pthread_key_ 계열의 함수나, pthread_cleanup_ 계열의 함수를 사용한다면, 해당 thread가 terminate 되기 직전에 해당 thread의 실행 context에서 callback이 호출되므로, 결국 이 callback 함수에서 main thread에게 알려주는 행위를 해주어야 하지 않을까요?
결국, pynoos님께서 말씀해주신 pipe등을 이용하는 방법이나, 혹은 pthread_kill()로 main thread에게 signal을 날리는 방법을 사용해야 할 듯 합니다.
음, 쓰레드가 죽은 경우에는..
Thread는 하나의 세그멘트 내에서 동작하므로, 하나의 쓰레드가 죽으면 프로세스 전체가 사망하게 됩니다.
따라서, 멀티 프로세스 프로그램에서 처럼 쓰레드 하나가 죽은 경우 다시 살려주는 것은 별다른 의미가 없는 것으로 보이며, 스스로 return 하는 경우에는 굳이 다른 Thread 에서 기다릴 필요 없이 return 하는 곳에서 종료처리를 해야 할 것으로 보입니다.
윈도우의 Thread 처럼 Thread handle이 selectable
윈도우의 Thread 처럼 Thread handle이 selectable 하지 않지요.
pipe 같은 것을 두어 read는 부모 thread가 하고, 자식 thread에서는 write 하는 용도로 사용하여, Thread 종료 직전에 thread ID 같은 것을 write 하고, 부모는 pipe를 select 하는 것이 좋겠습니다.
아무래도, select 에 들어가도록 하는 것이 좋을테니 말이죠.
---
http://coolengineer.com
비정상 상황이 아닌 이상 특정 쓰레드의 종료시 불려져야 할 핸들러를
비정상 상황이 아닌 이상 특정 쓰레드의 종료시 불려져야 할 핸들러를
정의하는 방법인 POSIX 표준에 있습니다.
바로 TSD(Thread Specific Data)를 이용하는 방법입니다.
TSD를 위한 key를 create할 때 exit 핸들러를 선택적으로
등록해 주도록 되어 있습니다. (NULL이면, 등록하지 않는 것입니다)
따라서, 어떤 쓰레드가 생성되었다면 위의 키에 대해서
set_specific을 한번 해 주시면, 그 쓰레드 종료될 때
해당 핸들러가 불리게 됩니다.
김성진 드림
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
[quote]비정상 상황이 아닌 이상 특정 쓰레드의 종료시 불려져야 할
이러한 방법으로는 pthread_cleanup_ 계열의 함수를 사용할 수도 있습니다.
그런데 논의되는 내용은 한 thread가 pthread_exit이나 pthread_cancel등의 이유로 terminate되는 경우에 이 thread를 create한 thread(편의상 main thread라고 부르겠습니다.)가 알아차릴 수 있는 방법이 무엇이냐 에 있는것 같습니다.
pthread_key_ 계열의 함수나, pthread_cleanup_ 계열의 함수를 사용한다면, 해당 thread가 terminate 되기 직전에 해당 thread의 실행 context에서 callback이 호출되므로, 결국 이 callback 함수에서 main thread에게 알려주는 행위를 해주어야 하지 않을까요?
결국, pynoos님께서 말씀해주신 pipe등을 이용하는 방법이나, 혹은 pthread_kill()로 main thread에게 signal을 날리는 방법을 사용해야 할 듯 합니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
댓글 달기