Spec-Zone.ru › Haskell 9

GHC.IOPort

Авторские права (c) Tamar Christina 2019
Лицензия см. libraries/base/LICENSE
Поддержка ghc-devs@haskell.org
Стабильность внутренняя
Переносимость непереносимая (расширения GHC)
Безопасный Haskell Нет
Язык Haskell2010

Содержание

  • Порты ввода-вывода

Описание

Тип IOPort. Это средство, используемое подсистемой ввода-вывода Windows.

API этого модуля нестабилен и не предназначен для использования широкой публикой. Если вам абсолютно необходимо от него зависеть, убедитесь, что вы используете жёсткий верхний предел, например, base < 4.X, а не base < 5, так как интерфейс может быстро меняться без предварительного предупреждения.

У нас есть жёсткие правила для порта ввода-вывода: * запись более одного раза — ошибка * чтение более одного раза — ошибка

Это даёт нам возможность заблокировать одну нить, дождаться результата от другой нити и затем быть разбуженными. *Ничего* больше.

Этот тип очень сильно связан с внутренней частью GHC. Он может быть изменён или удалён без предварительного уведомления в будущих релизах.

Порты ввода-вывода

data IOPort a Источник

IOPort — это синхронизирующая переменная, используемая для связи между конкурирующими нитями, где одна из нитей контролируется внешним состоянием. Например, действием ввода-вывода, которое обслуживается средой выполнения. Можно представить её как ящик, который может быть пустым или заполненным.

Она в основном похожа на поведение MVar, за исключением того, что writeIOPort не блокируется, если переменная заполнена, и сборщик мусора не будет принудительно освобождать блокировку, если посчитает, что есть тупик.

Свойства портов ввода-вывода: * Запись в пустой порт ввода-вывода не заблокирует. * Запись в заполненный порт ввода-вывода не заблокирует. Может выбросить исключение. * Чтение из порта ввода-вывода во второй раз может выбросить исключение. * Чтение из заполненного порта ввода-вывода не заблокируется, вернёт значение и очистит порт. * Чтение из пустого порта ввода-вывода будет блокироваться до записи. * Переиспользование порта ввода-вывода (то есть, чтение или запись дважды) не поддерживается и может выбросить исключение. Даже если чтения и записи чередуются.

Этот тип очень сильно связан с внутренней частью GHC. Он может быть изменён или удалён без предварительного уведомления в будущих релизах.

Конструкторы

IOPort (IOPort# RealWorld a)
Примеры реализации
Подробности реализации
Eq (IOPort a) Источник

С момента: base-4.1.0.0

Подробности реализации

Определено в GHC.Internal.IOPort

Методы

(==) :: IOPort a -> IOPort a -> Bool Источник

(/=) :: IOPort a -> IOPort a -> Bool Источник

newIOPort :: a -> IO (IOPort a) Источник

Создать IOPort, содержащую предоставленное значение.

newEmptyIOPort :: IO (IOPort a) Источник

Создать IOPort, которая изначально пуста.

readIOPort :: IOPort a -> IO a Источник

Атомарно прочитать содержимое IOPort. Если IOPort в данный момент пуста, readIOPort будет ожидать, пока она не заполнится. После readIOPort, IOPort остаётся пустой.

Важное свойство readIOPort:

  • Только одна нить может быть заблокирована на IOPort.

writeIOPort :: IOPort a -> a -> IO Bool Источник

Поместить значение в IOPort. Если IOPort в данный момент заполнена, writeIOPort выбросит исключение.

Важное свойство writeIOPort:

  • Только одна нить может быть заблокирована на IOPort.

doubleReadException :: SomeException Источник

© 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/GHC-IOPort.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API