Spec-Zone.ru › Elisp

Мьютексы

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

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

Функция: mutexp объект

Эта функция возвращает t если объект представляет собой мьютекс Emacs, nil в противном случае.

Функция: make-mutex &optional имя

Создает новый мьютекс и возвращает его. Если задано имя, это имя мьютекса. Оно должно быть строкой. Имя используется только для отладки; оно не имеет значения для Emacs.

Функция: mutex-name мьютекс

Возвращает имя мьютекса, как задано для make-mutex.

Функция: mutex-lock мьютекс

Это заблокирует поток, пока этот поток не получит мьютекс, или пока этот поток не будет сигнализирован с помощью thread-signal. Если мьютекс уже принадлежит этому потоку, то эта функция просто возвращает значение.

Функция: mutex-unlock мьютекс

Освобождает мьютекс. Если мьютекс не принадлежит этому потоку, это вызовет ошибку.

Макрос: with-mutex мьютекс тело…

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

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Mutexes.html

Spec-Zone.ru

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