rontolisp:make-mutex
(rontolisp:make-mutex)
新しい相互排他ロックを不透明なハンドルとして返します。渡してよいのは
rontolisp:with-mutex(または
rontolisp:mutex-acquire /
rontolisp:mutex-release)だけです。ハンドルの実体は
バックエンドごとに異なるため、表示したり、2 つを < で比較したり、算術演算を行ったり
することは移植可能ではありません。ハンドル自身との eq/eql 比較は機能します。
rontolisp は実際に並行実行されます —
rontolisp:http-handler
はインタプリタと JVM バックエンドでリクエストごとに 1 つの仮想スレッドを立て、
rontolisp:make-thread で自分のコードからも生成できます —
ロックが必要なのはそのためです。両方の WASM バックエンドではスレッドは常に 1 つなので、
これらのプリミティブは no-op になります。同じソースがどこでも動きます。
ロックは再入可能です。保持しているスレッドは再度獲得でき、獲得した回数だけ解放する 必要があります。
制限
- ハンドルは不透明でバックエンド依存です — 表示や順序付けをしないでください。
- マクロおよびこれらのプリミティブは関数値を持ちません:
#'rontolisp:make-mutexは エラーです。