【发布时间】:2016-01-22 14:31:57
【问题描述】:
我们有两个线程写入 Handle 包装 Socket。 Handle 很有用,因为它周围的 MVar 确保一次只能有一个线程对其进行写入。
我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入它——对 write 的调用应该收到一个错误。问题是hclose 函数会阻塞,直到它具有独占访问权。解决此问题的最佳方法是什么?
【问题讨论】:
我们有两个线程写入 Handle 包装 Socket。 Handle 很有用,因为它周围的 MVar 确保一次只能有一个线程对其进行写入。
我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入它——对 write 的调用应该收到一个错误。问题是hclose 函数会阻塞,直到它具有独占访问权。解决此问题的最佳方法是什么?
【问题讨论】:
IIRC 写入来处理锁定 Handle,因此您有两个选择:使用异步异常中止操作或使其成为非阻塞(例如,使用 hPutBufNonBlocking 尝试写入,使用 threadWaitWrite 等待发送数据) .
【讨论】: