[英]Proper multi-thread program termination. C
嗨,我被這個問題困住了,我不知道哪個是最好的解決方案:
我有一個帶有一些線程的進程。 所有線程都屏蔽了信號,只有一個 (SignalHandler) 檢查是否有掛起的信號。
while(!shouldEnd){
if(!sigwait(&set, &signum)){
if(signum == SIGINT){
fprintf(stderr, "Ricevuto SIGINT\n");
}
else{
//TODO
}
}
}
現在我想在收到 SIGINT (例如)時終止其他線程。 我怎樣才能正確地做到這一點? 主要問題是其他線程可能正在等待條件變量或在 accept() 中等待(用於套接字連接)。 我認為放置一個像“shouldEnd”這樣的變量並在線程應該停止工作時將其設置為 1 是一件好事。 這是一個好主意嗎 ? 等待的呢? 主要用於等待套接字連接的那個?
因此,首先,我們不知道您使用的線程是什么。 您可能會考慮為此使用 libBoost,因為使用RAII 風格的鎖和諸如此類的東西會讓您的生活更輕松。
無論如何,除非您啟用了信號屏蔽,否則只有進程的選定線程main()
在大多數示例中通常為main()
)才會捕獲信號。 當您希望線程干凈地關閉時,您只需要:
pipe
來喚醒等待accept()
的線程。mutexLock()l; bool bExitEarly = true; signal(condVar); mutexUnlock();
)。thread_join()
。 這將確保線程在main()
退出之前完全停止。 如果不這樣做, main()
可能會在線程完成之前退出,並在線程處於關閉邏輯中間時強行殺死它們,這很混亂,並且可能導致您的程序崩潰或更糟.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.