如何访问Clozure CL中的信号量计数?

时间:2016-05-26 02:31:23

标签: lisp common-lisp semaphore sbcl ccl

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

0 个答案:

没有答案