2
我们有两个线程写入Handle
包装Socket
。 Handle非常有用,因为它周围的MVar确保只有一个线程可以一次写入。Haskell手柄的非阻塞关闭
我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入中间 - 写入调用应该会收到错误。问题是hclose
功能会阻塞,直到它具有独占访问权限。解决此问题的最佳方式是什么?
我们有两个线程写入Handle
包装Socket
。 Handle非常有用,因为它周围的MVar确保只有一个线程可以一次写入。Haskell手柄的非阻塞关闭
我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入中间 - 写入调用应该会收到错误。问题是hclose
功能会阻塞,直到它具有独占访问权限。解决此问题的最佳方式是什么?
IIRC的写作来处理锁Handle
,所以你有两个选择:使用异步异常中止操作或使其非阻塞(例如使用hPutBufNonBlocking
尝试编写和threadWaitWrite
等待要发送的数据)。