GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Mutexes.html ・ emacs-doc.conao3.com

40.2 ミューテックス

ミューテックスとは、排他ロックのことです。任意の時点で、0個または1個のスレッドがミューテックスを保持できます。あるスレッドがミューテックスの取得を試みた際、そのミューテックスが既に別のスレッドによって保持されている場合、取得を試みるスレッドはミューテックスが利用可能になるまでブロックされます。

Emacs Lispのミューテックスは再帰的と呼ばれるタイプであり、これはスレッドが自身が所有するミューテックスを何度でも再取得できることを意味します。ミューテックスは取得回数をカウントしており、ミューテックスの取得には必ず解放が伴わなければなりません。スレッドによる最後の解放によってミューテックスは未所有状態に戻り、これにより別のスレッドがミューテックスを取得できるようになる可能性があります。

関数: mutexp object

この関数は、object が Emacs のミューテックスを表す場合は t を、そうでない場合は nil を返します。

関数: make-mutex &optional name

新しいミューテックスを作成して返します。name が指定された場合、それはミューテックスに付けられた名前です。文字列である必要があります。この名前はデバッグ目的のみであり、Emacs にとっては意味を持ちません。

関数: mutex-name mutex

make-mutex に指定された mutex の名前を返します。

関数: mutex-lock mutex

このスレッドがmutexを取得するか、あるいはthread-signalを用いてシグナルが送信されるまでブロックされます。mutexをすでにこのスレッドが保持している場合は、単に戻ります。

関数: mutex-unlock mutex

mutexを解放します。mutexがこのスレッドの所有でない場合、エラーが通知されます。

マクロ: with-mutex mutex body…

このマクロは、ミューテックスを保持したままフォームを評価する最もシンプルで安全な方法です。mutexを取得し、bodyを呼び出し、その後mutexを解放します。そして、bodyの結果を返します。