2016-01-22 3 views
2

У нас есть две нити, которые записываются в Handle, обертывая Socket. Handle полезен, потому что MVar вокруг него гарантирует, что только один поток может писать ему сразу.Неблокирующее закрытие ручки Haskell

Мы требуем, чтобы один из потоков был способен закрыть Ручку, даже если другой поток находится в середине записи - вызов для записи должен получить ошибку. Проблема в том, что функция hclose блокирует до тех пор, пока не будет иметь эксклюзивный доступ. Каков наилучший способ решения этой проблемы?

ответ

1

IIRC письмо для обработки запирает Handle, поэтому у вас есть два варианта: прервать операцию, используя асинхронное исключение или сделать его блокирующим (например, использовать hPutBufNonBlocking попробовать писать и threadWaitWrite ждать, пока данные будут отправлены).

Смежные вопросы