SBCL
セマフォ (パッケージ) を操作するsb-thread
場合、以下のスニペットに示すように、現在のセマフォ数を簡単に確認できます。
CL-USER> (defvar *semaphore* (sb-thread:make-semaphore))
*SEMAPHORE*
CL-USER> (sb-thread::semaphore-count *semaphore*)
0
CL-USER> (sb-thread::signal-semaphore *semaphore*)
NIL
CL-USER> (sb-thread::semaphore-count *semaphore*)
1
私は(パッケージClozure CL
を使用して)同じことをしようとしましたが、できませんでした。ccl
次に例を示します。
CL-USER> (defvar *semaphore* (ccl:make-semaphore))
*SEMAPHORE*
CL-USER> (ccl::semaphore-value *semaphore*)
#<A Foreign Pointer [gcable] #x7F6B240050B0>
を調べるとForeign Pointer
、次のように表示されます。
#<MACPTR #x30200080B31D>
--------------------
@0=#<A Foreign Pointer [gcable] #x7F6B240050B0>
Underlying UVECTOR
内部カウンターにアクセスする方法を見つけることも、その効果に関する実質的なヒントを見つけることもできませんでした。外部関数インターフェースを利用したり、sem_getvalue
システムコールを利用したりしようかと考えているのですが、どうすればいいのかまだわかりません。このカウンターへのアクセス方法に関する提案や洞察はありますか? どんな助けでも大歓迎です。