Control.Concurrent.Chan
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | стабильная |
| Переносимость | непереносимо (конкурентность) |
| Safe Haskell | Надёжный |
| Язык | Haskell2010 |
Содержание
Описание
Бесконечные каналы.
Каналы реализованы с использованием MVar и поэтому наследуют все ограничения, которые применяются к MVar (возможность гонок, тупиков и т. д.). Библиотека stm (транзакционная память) имеет более надёжную реализацию каналов под названием TChan.
Тип Chan
Chan — это абстрактный тип, представляющий бесконечный канал FIFO.
Примеры использования
Операции
newChan :: IO (Chan a) Источник
Создаёт и возвращает новый экземпляр Chan.
writeChan :: Chan a -> a -> IO () Источник
Записывает значение в Chan.
readChan :: Chan a -> IO a Источник
Читает следующее значение из Chan. Блокируется, когда канал пуст. Поскольку конец чтения канала — MVar, эта операция наследует гарантии справедливости MVar (например, блокированные потоки в этой операции разбуживаются в порядке FIFO).
Выбрасывает BlockedIndefinitelyOnMVar при пустом канале и отсутствии другого потока, удерживающего ссылку на канал.
dupChan :: Chan a -> IO (Chan a) Источник
Создаёт дубликат Chan: дублированный канал сначала пуст, но данные, записываемые в любой из каналов, будут доступны в обоих. Таким образом, это создаёт своего рода канал широковещательной передачи, где данные, записанные кем-либо, видны всем остальным.
(Обратите внимание, что дублированный канал не равен исходному. Следовательно: fmap (c /=) $ dupChan c возвращает True для всех c.)
Интерфейс потока
getChanContents :: Chan a -> IO [a] Источник
Возвращает ленивый список, представляющий содержимое заданного Chan, подобно hGetContents.
writeList2Chan :: Chan a -> [a] -> IO () Источник
Записывает весь список элементов в Chan.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/Control-Concurrent-Chan.html