Kann std :: atomic Inkremente mit Dekrementen abbrechen?

8

Verwenden von entspannter Speicherreihenfolge , z. Wäre es dem Compiler möglich, für einen Referenzzählzeiger ein nachfolgendes Inkrement und Dekrement zu optimieren?

%Vor%

Bei der Demontage sieht es nicht so aus. Aber da das Umordnen erlaubt ist und sich atomic wie ein Zähler verhält, nur Thread-sicher, könnte man argumentieren, dass er optimieren könnte, als wäre es ein einfacher Int.

    
Borph 04.08.2016, 11:25
quelle

2 Antworten

4

Ich glaube, dass es optimiert werden kann, sofern es nicht als volatil erklärt wird. Der Grund dafür ist, dass für jeden Zeitplan, der dazwischen einen Thread verschachtelt, ein gültiger Zeitplan existiert, der dies nicht tut. Ich glaube, dass dies auch für das drf-sc-Speichermodell der Fall ist.

Es wäre nicht der Fall, wenn dieser Thread etwas dazwischen liest.

    
Elazar 04.08.2016 12:14
quelle
-3

Der Compiler kann Atomics nicht optimieren, da dies den Zweck verletzen würde. Es muss davon ausgegangen werden, dass ein anderer Thread den Wert ebenfalls berührt, so dass das Entfernen nicht zulässig ist.

es kann auch nicht Sachen optimieren / umordnen, die für den C ++ Code von vorher nachher (und anders herum) "sichtbar" sind, da die Atomics Speicherbarrieren sind.

    
oreubens 04.08.2016 12:09
quelle