Schreiben auf verschiedene Offsets im Array immer gut definiert

8

In dieser Frage wurde festgestellt, dass das gleichzeitige Schreiben auf zwei verschiedene Offsets in einem Char-Array ein Datenrennen implizieren würde , da einige Prozessoren wie Alpha keine byteweise Adressierung haben, so dass es schwierig wäre, dies zu implementieren.

Ich sehe sicherlich, dass dies das Schreiben von Bytes auf Alpha-Prozessoren sehr verlangsamen würde (grundsätzlich mit einem LL / SC), aber wie ich den C ++ - Standard verstehe, ist jedes Feld in einem Array ein eigener Speicherort (obwohl nach dem Lesen von §1.7 Ich könnte auch das gesamte Array als einen Speicherort sehen - das ist wahrscheinlich, worauf diese Frage hinausläuft.)

Im Grunde genommen ist der folgende Pseudocode

%Vor%

gut definiert nach dem C ++ 14 Standard oder nicht?

    
Voo 10.01.2016, 14:30
quelle

1 Antwort

6

Aus dem C ++ 14 Standard (1.7 / 3):

  

Zwei oder mehr Ausführungsthreads (1.10) können separate Speicherorte aktualisieren und darauf zugreifen, ohne sich gegenseitig zu stören.

Wo es vorher definiert (Betonung meins)

  

Eine Speicherstelle ist entweder ein Objekt vom Typ skalar oder eine maximale Folge benachbarter Bitfelder mit allen   Breite ungleich Null.

Also sind die char s des Arrays Speicherplätze, aber das Array selbst ist nicht; Daher interferieren separate Threads, die auf verschiedene char s schreiben, nicht miteinander.

    
Vaughn Cato 10.01.2016, 14:36
quelle