Haskell 句柄的非阻塞关闭
Non-blocking close of Haskell Handle
我们有两个线程写入 Handle
wrapping a Socket
。 Handle 很有用,因为它周围的 MVar 确保一次只能有一个线程写入它。
我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入它——写入调用应该收到一个错误。问题是 hclose
函数会阻塞,直到它具有独占访问权限。解决此问题的最佳方法是什么?
IIRC 写入处理锁定 Handle
,因此您有两个选择:使用异步异常中止操作或使其成为非阻塞的(例如,使用 hPutBufNonBlocking
尝试写入和 threadWaitWrite
等待发送数据)。
我们有两个线程写入 Handle
wrapping a Socket
。 Handle 很有用,因为它周围的 MVar 确保一次只能有一个线程写入它。
我们要求其中一个线程应该能够关闭句柄,即使另一个线程正在写入它——写入调用应该收到一个错误。问题是 hclose
函数会阻塞,直到它具有独占访问权限。解决此问题的最佳方法是什么?
IIRC 写入处理锁定 Handle
,因此您有两个选择:使用异步异常中止操作或使其成为非阻塞的(例如,使用 hPutBufNonBlocking
尝试写入和 threadWaitWrite
等待发送数据)。