Spec-Zone.ru › Haskell 9

Foreign.Concurrent

Авторские права (c) Университет Глазго 2003
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддержка ffi@haskell.org
Стабильность предварительная
Переносимость непереносимая (требуется конкурентность)
Safe Haskell Безопасный
Язык Haskell2010

Содержание

  • Операции, основанные на конкурентности ForeignPtr

Описание

Типы данных FFI и операции, использующие или требующие конкурентности (только GHC).

Операции ForeignPtr, основанные на конкурентности

Эти функции обобщают свои аналоги в модуле Foreign.ForeignPtr, позволяя использовать произвольные IO действия в качестве финализаторов. Эти финализаторы, по необходимости, выполняются в отдельном потоке, см. Деструкторы, финализаторы и синхронизация, Ганс Бойем, POPL, 2003.

newForeignPtr :: Ptr a -> IO () -> IO (ForeignPtr a) Источник

Преобразует обычную ссылку на память в внешний объект, связав с ссылкой финализатор - заданный монодической операцией.

При срабатывании финализации сборщиком мусора, менеджер памяти запустит финализатор в отдельном потоке, некоторое время после того, как последняя ссылка на ForeignPtr будет удалена. Нет гарантии своевременности, и, на самом деле, нет гарантии, что финализатор когда-либо выполнится при срабатывании финализации сборщиком мусора.

При срабатывании финализации явным вызовом finalizeForeignPtr, финализатор выполнится немедленно в текущем потоке Haskell.

Обратите внимание, что ссылки из финализатора не обязательно предотвращают финализацию другого объекта. Если финализатор А ссылается на Б (возможно, используя touchForeignPtr, то единственной гарантией является то, что финализатор Б никогда не будет запущен до финализатора А. Если оба А и Б недоступны, то оба финализатора будут запущены вместе. См. touchForeignPtr, чтобы узнать больше о порядке финализаторов.

addForeignPtrFinalizer :: ForeignPtr a -> IO () -> IO () Источник

Эта функция добавляет финализатор к данному ForeignPtr. Финализатор будет выполнен до всех других финализаторов для того же объекта, которые уже были зарегистрированы.

Это вариант addForeignPtrFinalizer, где финализатор - произвольное IO действие. При вызове он выполнится в новом потоке.

Примечание. Будьте очень осторожны с этими финализаторами. Частая ошибка - если финализатор ссылается на другой завершенный объект, он не предотвращает финализацию этого объекта. В частности, Handle - это завершенные объекты, поэтому финализатор не должен ссылаться на Handle (включая stdout, stdin, или stderr).

© 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/Foreign-Concurrent.html

Spec-Zone.ru

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