Sichere parallele Verwendung von MVector / IOVector aus dem Haskell-Vektorpaket

8

Kann ich sicher nicht überlappenden Indizes eines IOVectors (aus dem Haskell-Vektorpaket) aus mehreren parallelen Threads zuweisen, oder brauche ich einen zusätzlichen Mutex?

Hintergrund: Ich möchte eine Sammlung von E / A-Berechnungen parallel ausführen und dann alle Ergebnisse aufzeichnen. Ich habe damit begonnen, die Ergebnisse in einer Liste zurückzugeben, aber das scheint die falsche Datenstruktur zu sein. Also suche ich einen IOVector aus dem Vektor-Paket, um die Ergebnisse zu speichern.

Meine Frage ist, kann ich etwas schreiben wie:

%Vor%

Ist das garantiert sicher? Oder brauche ich ein Mutex-ähnliches Steuerelement (z. B. halte v in MVar ), um sicherzustellen, dass nur ein Schreibvorgang gleichzeitig ausgeführt wird?

    
Neil Brown 14.11.2013, 00:44
quelle

1 Antwort

2

Aus dem Code und den Diskussionen in den Kommentaren scheint kein Grund zu der Annahme zu bestehen, dass es nicht Thread-sicher ist. Und nur um dies zu unterstützen, hier ist ein kleiner Test dafür:

%Vor%

Auch bei 100 parallel erzeugten Threads ergibt das Countdown von 1000000 mit -RTS -N oder -RTS -N10 immer OK .

    
Joachim Breitner 24.11.2013, 10:51
quelle

Tags und Links