Модуль 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
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