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