Spec-Zone.ru › OCaml 4.14

Модуль Thread

module Thread: sig .. end

Легковесные потоки для Posix 1003.1c и Win32.

type t 

Тип дескрипторов потоков.

Создание и завершение потоков

val create : ('a -> 'b) -> 'a -> t

Thread.create funct arg создаёт новый поток управления, в котором функция funct arg выполняется одновременно с другими потоками программы. Применение Thread.create возвращает дескриптор созданного потока. Новый поток завершается, когда приложение funct arg возвращает значение, либо нормально, либо сгенерировав исключение Thread.Exit, либо сгенерировав любое другое необработанное исключение. В последнем случае, необработанное исключение выводится на стандартный поток ошибок, но не распространяется обратно в родительский поток. Аналогично, результат применения funct arg игнорируется и не доступен напрямую родительскому потоку.

val self : unit -> t

Возвращает дескриптор потока, который выполняется в текущий момент.

val id : t -> int

Возвращает идентификатор данного потока. Идентификатор потока — целое число, уникально идентифицирующее поток. Его можно использовать для построения структур данных, индексированных по потокам.

exception Exit

Исключение, которое может быть сгенерировано кодом пользователя для инициирования завершения текущего потока. В отличие от вызова функции Thread.exit, генерация исключения Thread.Exit вызовет финализаторы Fun.finally и обработчики исключений по умолчанию. Это рекомендуемый способ преждевременного завершения потоков.

  • Since 4.14.0
val exit : unit -> unit

Преждевременно завершить текущий выполняющийся поток.

val kill : t -> unit

Эта функция должна была преждевременно завершить поток, дескриптор которого указан. Она в настоящее время не реализована из-за проблем с обработчиками очистки на многих реализациях POSIX 1003.1c. Она всегда генерирует исключение Invalid_argument.

Приостановление потоков

val delay : float -> unit

delay d приостанавливает выполнение вызывающего потока на d секунды. Другие потоки программы продолжают работу в это время.

val join : t -> unit

join th приостанавливает выполнение вызывающего потока до завершения потока th.

val yield : unit -> unit

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

Ожидание файлов-дескрипторов или процессов

Функции ниже — остатки от более ранней, основанной на виртуальных машинах, системы потоков. Модуль Unix предоставляет эквивалентную функциональность более общим и стандартным способом. Рекомендуется использовать функции Unix напрямую.

val wait_read : Unix.file_descr -> unit

Эта функция ничего не делает в текущей реализации библиотеки потоков и может быть удалена из всех пользовательских программ.

val wait_write : Unix.file_descr -> unit

Эта функция ничего не делает в текущей реализации библиотеки потоков и может быть удалена из всех пользовательских программ.

val wait_timed_read : Unix.file_descr -> float -> bool

См. Thread.wait_timed_write.

val wait_timed_write : Unix.file_descr -> float -> bool

Приостанавливает выполнение вызывающего потока до тех пор, пока не станет доступен хотя бы один символ или EOF для чтения (wait_timed_read) или один символ может быть записан без блокировки (wait_timed_write) в заданном Unix-файловом дескрипторе. Ожидать не более указанного времени (в секундах). Вернуть true если файл-дескриптор готов к вводу/выводу и false если таймаут истек. Аналогичную функциональность можно получить с помощью Unix.select.

val select : Unix.file_descr list ->       Unix.file_descr list ->       Unix.file_descr list ->       float -> Unix.file_descr list * Unix.file_descr list * Unix.file_descr list

Та же функция, что и Unix.select. Приостанавливает выполнение вызывающего потока до тех пор, пока ввод/вывод не станет возможным для указанных Unix-файловых дескрипторов. Аргументы и результаты имеют тот же смысл, что и для Unix.select.

val wait_pid : int -> int * Unix.process_status

Та же функция, что и Unix.waitpid. wait_pid p приостанавливает выполнение вызывающего потока до тех пор, пока процесс, указанный идентификатором процесса p, не завершит работу. Возвращает pid завершённого дочернего процесса и код завершения, как в Unix.wait.

Управление сигналами

Обработка сигналов следует модели POSIX потоков: сигналы, сгенерированные потоком, доставляются в этот поток; сигналы, сгенерированные внешне, доставляются одному из потоков, который их не блокирует. Каждый поток имеет набор заблокированных сигналов, который может быть изменён с помощью Thread.sigmask. Этот набор наследуется при создании потока. Маски сигналов на поток поддерживаются только системной библиотекой потоков под Unix, но не под Win32, и не библиотекой потоков VM.

val sigmask : Unix.sigprocmask_command -> int list -> int list

sigmask cmd sigs изменяет набор заблокированных сигналов для вызывающего потока. Если cmd равно SIG_SETMASK, заблокированные сигналы устанавливаются в сигналы из списка sigs. Если cmd равно SIG_BLOCK, сигналы из sigs добавляются в набор заблокированных сигналов. Если cmd равно SIG_UNBLOCK, сигналы из sigs удаляются из набора заблокированных сигналов. sigmask возвращает набор предварительно заблокированных сигналов для потока.

val wait_signal : int list -> int

wait_signal sigs приостанавливает выполнение вызывающего потока до тех пор, пока процесс не получит один из сигналов, указанных в списке sigs. Затем возвращает номер полученного сигнала. Обработчики сигналов, присоединённые к сигналам из sigs, не будут вызваны. Сигналы sigs должны быть заблокированы перед вызовом wait_signal.

Необработанные исключения

val default_uncaught_exception_handler : exn -> unit

Thread.default_uncaught_exception_handler выведет идентификатор потока, исключение и стек вызовов (если доступен).

val set_uncaught_exception_handler : (exn -> unit) -> unit

Thread.set_uncaught_exception_handler fn регистрирует fn в качестве обработчика необработанных исключений.

Если новый обработчик необработанных исключений сгенерирует исключение, будет вызван Thread.default_uncaught_exception_handler.

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Thread.html

Spec-Zone.ru

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