Ich denke eher, dass es bei einer Barriere darum geht, den Compiler
insofern einzuengen, dass er Speicherzugriffe nicht wahllos im Code
rumschieben darf.
In
könnte der Compiler auch die Reihenfolge der Zuweisungen umdrehen, wenn
ihm das besser in den Kram passt, weil er zb j (oder die Adresse von j)
schon in einem CPU Register hatte.
1 | ...
|
2 | j = k;
|
3 | i = 5;
|
4 | j = 8;
|
5 | ...
|
Erwarten würde ich solche Dinge, wenn es in den STrukturen zb logische
Querverbindungen gibt. Wenn also Werte von zb einem Gültigkeitsflag
abhängen und es wichtig ist, dass die Wertzuweisung erfolgt, bevor das
Flag auf gültig gesetzt wird. Dreht der Compiler aus irgendeinem Grund
die Reihenfolge der Aktionen um, dann ergibt das einen logischen Fehler.