[英]How to Kill child threads from Parent thread - C
我有一個包含幾個進程的小程序,每個進程包含多個線程。
當父進程接收到特定消息時,它應該終止其所有子線程並銷毀所有互斥鎖。 問題是某些線程可能被阻塞(在 I/O 命令上),因此無法接收一些信號或 msg 以完成它們的過程。
我想過使用pthread_cancel
並覆蓋cancel routine
但問題是發送cancel signal
時某些互斥體似乎被鎖定,因此無法銷毀。
使用pthread_kill
也不起作用,因為它會殺死整個進程,因此在我想要干凈退出時無法使用。
進程如何以干凈的方式殺死其子線程並銷毀互斥鎖?
代碼的相關部分如下所示:
ret = fork()
if(ret > 0) {
pthread_t th1, th2;
my_pthread_create(&th1, threadFunction1, NULL);
my_pthread_create(&th2, threadFunction2, NULL);
if(msgrcv(qid1, &msg, MSG_SIZE,0,0) < 0) {
perror("msgrcv failed...\n");
} else {
//print some information from the global variables, terminate
//threads and destroy mutexes
}
}
else if(ret<0) {
perror("fork failed...\n");
} else {
....
}
任何幫助將不勝感激!
謝謝
scoped_lock
是您可以使用的最佳選項之一,當程序執行超出范圍時,它會自動釋放互斥鎖。
話雖如此,我不建議在生產就緒代碼中殺死線程,除非確實有必要並且沒有其他選擇,您還可以使用信號機制來通知線程自行死亡,這將避免很多問題。 例如,您可以在線程內為特定信號設置一個等待函數,並在收到相同信號后立即退出線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.