2011-06-09 107 views
2

我有一個連接的服務器線程阻塞在accept()等待連接。在外部,我嘗試通過調用pthread_cancel(),然後調用pthread_join()來終止該線程。在調用連接時,我的程序終止於SIGABRT。pthread_join導致接受終止()

我很可能會去分離線程,並使其select()超時檢查連接,所以我可以然後「發信號」它退出。所以,我知道這是一個解決方案,但作爲好奇的類型,我想知道爲什麼第一個解決方案不起作用。

+0

我很想知道。你有沒有在'pthread_cancel()'之前嘗試'pthread_setcancelstate()'? – 2011-06-29 19:16:06

回答

0

我認爲你得到程序終止SIGABRT是因爲pthread_cancel() - 當被阻塞的線程獲得信號時,它可能會死亡。直到pthread_cancel()調用返回後才發送信號,所以看起來好像是由於聯接調用而發生的。

要檢查並查看我的想法是否正確,我會插入一段時間(1);在pthread_cancel()之後循環查看是否仍然獲得SIGABRT。