Werden Schreibvorgänge in ein MutableByteArray-Atom geschrieben?

8

Ich verwende das primitive -Paket und ich möchte sicherstellen, dass Schreibvorgänge (insbesondere von Typen, die breiter als ein Wort sind) von einem Thread nicht als Müll von einem anderen gesehen werden können. Dies wird manchmal als "Reißen" bezeichnet.

    
jberryman 08.03.2014, 04:20
quelle

1 Antwort

1

Ich vermute, das ist ein undefiniertes Verhalten, und Multi-Word-Schreibvorgänge sind in jedem Fall nicht atomar, wie dieses schnelle und schmutzige Programm zeigt:

%Vor%

Erstellen dieses Programm mit Ghc-7.6.3,% Co_de%, in 7 Ausführungen mit% Co_de% Ich habe die folgenden Ergebnisse:

%Vor%

Lese- / Schreibvorgänge eines einzelnen Maschinenworts sind wahrscheinlich atomar, solange das Speichermodell der CPU-Architektur dies garantiert.

Ein Einwand gegen diese Demo ist, dass die Prim-Instanz für -O2 -threaded -rtsopts falsch ist. Was ist das für eine Sorte? Angesichts der verfügbaren Grundelemente sehe ich jedoch nicht, wie man etwas besser für Mehrwort-Typen implementieren kann.

Sie müssen eine andere Synchronisierungsmethode verwenden, um sicherzustellen, dass Schreibvorgänge mit mehreren Wörtern atomar sind. Ein einfacher Ansatz besteht darin, Ihr Array in -N3 zu belassen. Oder vielleicht würde mein Kickchan -Paket helfen (zumindest inspirierend, wenn es Ihren Anwendungsfall nicht anspricht).

>     
John L 09.03.2014, 01:17
quelle

Tags und Links