Spec-Zone.ru › OCaml

Модуль Потоки

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 игнорируется и не является напрямую доступным для родительского потока.

См. также Domain.spawn, если вам нужен параллельный запуск.

val self : unit -> t

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

val id : t -> int

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

exception Exit

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

val exit : unit -> unit
Устаревшее. Используйте 'raise Thread.Exit' вместо этого.

Генерирует исключение Thread.Exit. В потоке, созданном Thread.create, это приведёт к преждевременному завершению потока, если сама функция потока не обработает исключение. Финализаторы Fun.protect и обработчики исключений «по умолчанию» будут выполнены.

Для явного указания того, что исключение будет сгенерировано и вызовет выполнение финализаторов и обработчиков исключений по умолчанию, рекомендуется использовать raise Thread.Exit вместо Thread.exit ().

  • До версии 5.0 Использулась другая реализация, не основанная на генерации исключений и не выполняющая финализаторы и обработчики исключений по умолчанию. Предыдущая реализация имела другое поведение при вызове вне потока, созданного Thread.create.

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

val delay : float -> unit

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

val join : t -> unit

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

val yield : unit -> unit

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

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

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

val wait_timed_read : Unix.file_descr -> float -> bool
Устаревшее. Используйте Unix.select вместо этого.

См. Thread.wait_timed_write.

val wait_timed_write : Unix.file_descr -> float -> bool
Устаревшее. Используйте Unix.select вместо этого.

Приостанавливает выполнение вызывающего потока до тех пор, пока для чтения не станет доступен по крайней мере один символ или 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.select. Приостанавливает выполнение вызывающего потока до тех пор, пока ввод/вывод не станет возможным на заданных дескрипторах Unix-файлов. Аргументы и результаты имеют такое же значение, как и для Unix.select.

val wait_pid : int -> int * Unix.process_status
Устаревшее. Используйте Unix.waitpid вместо этого.

Такая же функция, как 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-2024 INRIA.
https://ocaml.org/manual/5.2/api/Thread.html

Spec-Zone.ru

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