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