2
我在線程中運行的linux中有阻塞讀取。在linux上中止阻塞讀取
在程序關閉期間,我想將線程從此讀取中分離出來。不幸的是,我不能使用輪詢或者選擇和編寫正確的代碼,因爲從中讀取的文件是不實現輪詢/選擇功能的設備驅動程序。
作爲一種臨時解決方案,我目前通過pthread_kill向該線程發送一個SIGUSR1信號並從該處理程序調用pthread_exit。這殺死了線程,並且工作到目前爲止,但我對解決方案並不滿意,因爲信號可能發生在任何地方,而不僅僅是讀取內容。
是否有任何機制來中斷Linux上的阻塞讀取?
順便說一句 - 我試圖從一個不同的線程關閉文件句柄,希望這會給某種IO錯誤。不幸的是,這個簡單的解決方案根本沒有奏效
信號是中斷阻塞讀取的唯一方法。 – 2011-03-06 16:47:19
調用pthread_exit的信號在道義上等同於pthread_cancel'ing線程fwiw(假設線程是可取消的)。閱讀是一個取消點。這並不比你當前的解決方案好,但它可能會簡化代碼。 – 2011-03-06 17:02:03