2016-04-24 161 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)