Haskell Handle的非阻塞关闭

时间:2016-01-22 14:31:58

标签: sockets haskell handle

我们有两个线程写入Handle包裹Socket。 Handle很有用,因为它周围的MVar确保只有一个线程可以一次写入它。

我们要求其中一个线程应该能够关闭Handle,即使另一个线程正在写入它 - 写入的调用应该会收到错误。问题是hclose函数会阻塞,直到它具有独占访问权限。解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

IIRC写入处理锁定Handle,因此您有两个选择:使用异步异常中止操作或使其无阻塞(例如,使用hPutBufNonBlocking尝试写入,threadWaitWrite等待要发送的数据。)