2016-04-24 9 views
2

私はdocumentation of lparallel.queueの正しい場所を探していないかもしれませんが、それらのキューはスレッドセーフであり、キューのロック/アンロック自体が処理されるため、キューのユーザーはロック/アンロックを明示的に実行するには?これがどこかに書かれていれば、私はそのリンクに感謝します。スレッドセーフなLparallel.queue?

答えて

3

私にはわからない、それが指定されていますが、コードを見てすると、キューすることを示しています関数は実際にスレッドセーフです。

キュー機能は、すべてのターンでWITH-LOCK-HELDに包まれたコンテンツと機能のDEFUNになりDEFINE-LOCKING-FN/BASEに展開DEFINE-LOCKING-FNへの呼び出しに展開します。

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) 
関連する問題