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