2016-04-24 20 views
2

Ich kann nicht an der richtigen Stelle für die documentation of lparallel.queue suchen, aber können wir davon ausgehen, dass diese Warteschlangen thread-sicher sind und dass die Warteschlangen kümmern sich um alle Sperren/Entsperren selbst, so dass der Benutzer der Warteschlangen nicht haben explizit sperren/entriegeln? Wenn dies irgendwo dokumentiert ist, würde ich den Link schätzen.Lparallel.queue thread-safe?

Antwort

3

Ich weiß nicht, wo es angegeben, aber Blick auf den Code zeigt, dass die Warteschlange Funktionen sind tatsächlich threadsicher.

Die Warteschlangenfunktionen erweitern, um alle Anrufe in DEFINE-LOCKING-FN was wiederum zu einem DEFINE-LOCKING-FN/BASE erweitert, die in einem WITH-LOCK-HELD umwickelt mit dem Inhalt in einem DEFUN der Funktion führt.

3

Mit Blick auf den Quellcode scheinen die Warteschlangen gesperrt zu sein.

(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)) 

die entriegelte Funktionen haben einen eigenen Namen:

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