在我的應用程序中,主線程創建兩個連接的線程;一個通過在循環中調用scanf()等待用戶輸入,另一個通過在循環中調用accept()來偵聽傳入套接字連接。新的連接在分離的獨立線程中處理。通過信號中斷兩個阻塞線程
我希望程序在收到SIGINT信號時正常關閉。這意味着監聽線程應該停止接受新連接,等待當前正在服務連接的線程關閉,然後再等待。等待用戶輸入的線程也應該結束,從而允許主線程結束。
Scanf()和accept()都被阻塞,但可以被信號中斷,但發送到進程的信號只能由一個線程(AFAIK)處理。我的想法是阻止所有線程中的SIGINT信號,除了等待它的主線程。當它收到一個SIGINT時,它會發送SIGUSR1給兩個線程(一個在scanf()上阻塞,一個在accept()上阻塞),然後加入這些線程。
這是一個很好的解決方案嗎?有沒有更好的或者標準的方法來實現這一目標?
謝謝 - 我暗自希望你能回答這個問題!問題是,一旦一個線程被取消,例如在accept()上被阻塞時,它之後的任何邏輯都不會運行。我需要線程等待處理連接的分離線程,然後在退出之前釋放資源。我怎麼能做到這一點? – SlappyTheFish 2012-01-29 21:25:50
啊,是pthread_cleanup_push()你的意思是清理處理程序?看起來它會做的伎倆。 – SlappyTheFish 2012-01-29 21:35:17
是的,這就是你如何使用取消。 – 2012-01-29 23:04:46