簡體   English   中英

如何從父線程中殺死子線程 - C

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM