2016-01-22 34 views
2

我们有两个线程写入Handle包装Socket。 Handle非常有用,因为它周围的MVar确保只有一个线程可以一次写入。Haskell手柄的非阻塞关闭

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

回答

1

IIRC的写作来处理锁Handle,所以你有两个选择:使用异步异常中止操作或使其非阻塞(例如使用hPutBufNonBlocking尝试编写和threadWaitWrite等待要发送的数据)。