Изящный выход для многопоточного haskell - PullRequest
3 голосов
/ 22 сентября 2010

На данный момент это абсолютно теоретически, но я пытался обдумать эту проблему.Давайте возьмем клиента для примера.Для каждого соединения есть потоки forkIOd, и один из них хочет выйти из всей программы (т. Е. / Выйти).Как эта информация будет распространена в другие потоки?

Это не условие, но я предполагаю, что потоки читают из своих соответствующих потоков, которые блокируют.Так как они бездействуют, пока что-то для них не написано, они не могут опросить какую-либо переменную «done».Итак, моя первая мысль unless done неясна.

У меня нет решения для какой-либо программы, поэтому любой, кто предлагает решения для любого языка, ценится, но реальный вопрос в том, как это сделать в Haskell..

1 Ответ

8 голосов
/ 22 сентября 2010

Лучший из известных мне способов - это яд, который реализован библиотекой CHP.

См. Отличное объяснение здесь: http://chplib.wordpress.com/2009/09/30/poison-concurrent-termination/

В данной статье случайно рассматриваются другие решения иобъясняет, почему они обычно несколько хрупкие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...