Мьютекс — это эксклюзивная блокировка. В любой момент времени мьютекс может принадлежать нулю или одному потоку. Если поток пытается получить мьютекс, а мьютекс уже принадлежит другому потоку, то поток, пытающийся получить его, будет заблокирован до тех пор, пока мьютекс не станет доступен.
Мьютексы Emacs Lisp являются типа recursive (рекурсивные), что означает, что поток может повторно получить мьютекс, которым он владеет, любое количество раз. Мьютекс отслеживает количество раз, которое он был получен, и каждое получение мьютекса должно сопровождаться освобождением. Последнее освобождение мьютекса потоком возвращает его в состояние без владельца, потенциально позволяя другому потоку получить мьютекс.
Эта функция возвращает t, если object представляет собой мьютекс Emacs, и nil в противном случае.
Создает новый мьютекс и возвращает его. Если указан name, это имя, присвоенное мьютексу. Оно должно быть строкой. Имя предназначено только для целей отладки; для Emacs оно не имеет значения.
Возвращает имя mutex, указанное при вызове make-mutex.
Эта функция будет блокироваться до тех пор, пока этот поток не получит mutex, или пока этот поток не будет сигнализирован с помощью thread-signal. Если mutex уже принадлежит этому потоку, функция просто возвращает управление.
Освобождает mutex. Если mutex не принадлежит этому потоку, произойдет ошибка.
Этот макрос — самый простой и безопасный способ вычисления форм при удержании мьютекса. Он получает mutex, вызывает body, а затем освобождает mutex. Он возвращает результат body.