Control.Concurrent.Chan
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | непереносимая (конкурентность) |
| Безопасный 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/8.10.2/docs/html/libraries/base-4.14.1.0/Control-Concurrent-Chan.html