2016-01-22 45 views
2

我們有兩個線程寫入Handle包裝Socket。 Handle非常有用,因爲它周圍的MVar確保只有一個線程可以一次寫入。Haskell手柄的非阻塞關閉

我們要求其中一個線程應該能夠關閉句柄,即使另一個線程正在寫入中間 - 寫入調用應該會收到錯誤。問題是hclose功能會阻塞,直到它具有獨佔訪問權限。解決此問題的最佳方式是什麼?

回答

1

IIRC的寫作來處理鎖Handle,所以你有兩個選擇:使用異步異常中止操作或使其非阻塞(例如使用hPutBufNonBlocking嘗試編寫和threadWaitWrite等待要發送的數據)。