1

使用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系统调用,但还不知道如何去做。您对如何访问此柜台有任何建议或见解吗?非常感谢任何帮助。

4

0 回答 0