互斥锁(mutex) 是一种独占锁。在任意时刻,互斥锁只能被零个或一个线程持有。 若一个线程尝试获取已被其他线程持有的互斥锁,该线程会阻塞,直到互斥锁变为可用。
Emacs Lisp 的互斥锁属于 可递归(recursive) 类型,即线程可对自身持有的互斥锁 重复获取任意次数。互斥锁会记录被获取的次数,每次获取都必须对应一次释放。 当线程完成最后一次释放后,互斥锁恢复为无主状态,此时其他线程可获取该锁。
若 object 为 Emacs 互斥锁对象,该函数返回 t,否则返回 nil。
创建并返回一个新的互斥锁。若指定 name,则为互斥锁命名, 名称必须为字符串。该名称仅用于调试,对 Emacs 无实际意义。
返回 mutex 的名称,即创建时传给 make-mutex 的名称。
阻塞当前线程,直到获取 mutex,或当前线程被 thread-signal 发送信号。
若 mutex 已由当前线程持有,该函数直接返回。
释放 mutex。若当前线程并未持有该互斥锁,会触发错误。
该宏是持有互斥锁执行代码的最简且安全的方式。它先获取 mutex, 执行 body,随后释放互斥锁,并返回 body 的执行结果。