Next: , Previous: , Up: Threads   [Contents][Index]


37.2 ミューテックス

ミューテックス(mutex)は排他的なロックです。任意のタイミングにおいて0、または1つのスレッドがミューテックスを所有できます。スレッドがミューテックスの取得を試みたときに別スレッドがすでにそのミューテックスを所有していたら、ミューテックスが利用可能になるまで取得を試みたスレッドはブロックされます。

Emacs Lispのミューテックスは再帰的(recursive)と呼ばれるタイプです。これはスレッドがミューテックスを何回も再帰的に所有できることを意味します。ミューテックスは所有された回数を保持していて、それら所有のそれぞれがリリースとペアになっていなければなりません。スレッドによるミューテックスの最後のリリースによりミューテックスは他のスレッドが潜在的に所有可能である非所有な状態へとリバートされます。

Function: mutexp object

この関数はobjectがEmacsのミューテックスを表していればt、それ以外はnilをリターンする。

Function: make-mutex &optional name

新たなミューテックスを作成してリターンする。nameが指定されたらミューテックスの名前として与えられる(文字列でなければならない)。これはデバッグにたいする用途のみの名前でありEmacsにとって意味はない。

Function: mutex-name mutex

make-mutexで指定されたmutexの名前をリターンする。

Function: mutex-lock mutex

これはスレッドがmutexを所有するか、スレッドがthread-signalの使用によりシグナルされるまでブロックする。スレッドがmutexをすでに所有していたら単にリターンする。

Function: mutex-unlock mutex

mutexをリリースする。そのスレッドがmutexを所有していなければエラーをシグナルする。

Macro: with-mutex mutex body…

このマクロはもっともシンプルかつ安全にミューテックスを保持しつつフォームを評価する方法である。これはmutexを取得してbodyを呼び出してからmutexをリリースする。bodyの結果をリターンする。