ミューテックス(mutex)は排他的なロックです。任意のタイミングにおいて0、または1つのスレッドがミューテックスを所有できます。スレッドがミューテックスの取得を試みたときに別スレッドがすでにそのミューテックスを所有していたら、ミューテックスが利用可能になるまで取得を試みたスレッドはブロックされます。
Emacs Lispのミューテックスは再帰的(recursive)と呼ばれるタイプです。これはスレッドがミューテックスを何回も再帰的に所有できることを意味します。ミューテックスは所有された回数を保持していて、それら所有のそれぞれがリリースとペアになっていなければなりません。スレッドによるミューテックスの最後のリリースによりミューテックスは他のスレッドが潜在的に所有可能である非所有な状態へとリバートされます。
この関数はobjectがEmacsのミューテックスを表していればt
、それ以外はnil
をリターンする。
新たなミューテックスを作成してリターンする。nameが指定されたらミューテックスの名前として与えられる(文字列でなければならない)。これはデバッグにたいする用途のみの名前でありEmacsにとって意味はない。
make-mutex
で指定されたmutexの名前をリターンする。
これはスレッドがmutexを所有するか、スレッドがthread-signal
の使用によりシグナルされるまでブロックする。スレッドがmutexをすでに所有していたら単にリターンする。
mutexをリリースする。そのスレッドがmutexを所有していなければエラーをシグナルする。
このマクロはもっともシンプルかつ安全にミューテックスを保持しつつフォームを評価する方法である。これはmutexを取得してbodyを呼び出してからmutexをリリースする。bodyの結果をリターンする。