2016-04-24 130 views

回答

3

我不知道它的规定,但看代码表明队列函数确实是线程安全的。

队列功能的全部扩展到呼叫DEFINE-LOCKING-FN这又膨胀至DEFINE-LOCKING-FN/BASE这导致与包裹在WITH-LOCK-HELD该内容的功能的一个DEFUN

3

看着源代码,队列似乎被锁定。

(define-queue-fn push-queue (object queue) 
    push-cons-queue 
    push-vector-queue) 

...

(define-locking-fn push-cons-queue (object queue) (t cons-queue) (values) lock 
    (with-cons-queue-slots (impl cvar) queue 
    (push-raw-queue object impl) 
    (when cvar 
     (condition-notify cvar))) 
    (values)) 

的解锁功能都有一个独立的名字:

(define-queue-fn push-queue/no-lock (object queue) 
    push-cons-queue/no-lock 
    push-vector-queue/no-lock)