2
我們有兩個線程寫入Handle
包裝Socket
。 Handle非常有用,因爲它周圍的MVar確保只有一個線程可以一次寫入。Haskell手柄的非阻塞關閉
我們要求其中一個線程應該能夠關閉句柄,即使另一個線程正在寫入中間 - 寫入調用應該會收到錯誤。問題是hclose
功能會阻塞,直到它具有獨佔訪問權限。解決此問題的最佳方式是什麼?
我們有兩個線程寫入Handle
包裝Socket
。 Handle非常有用,因爲它周圍的MVar確保只有一個線程可以一次寫入。Haskell手柄的非阻塞關閉
我們要求其中一個線程應該能夠關閉句柄,即使另一個線程正在寫入中間 - 寫入調用應該會收到錯誤。問題是hclose
功能會阻塞,直到它具有獨佔訪問權限。解決此問題的最佳方式是什麼?
IIRC的寫作來處理鎖Handle
,所以你有兩個選擇:使用異步異常中止操作或使其非阻塞(例如使用hPutBufNonBlocking
嘗試編寫和threadWaitWrite
等待要發送的數據)。