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.
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.
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.
Tags und Links c++ multithreading c++11 compiler-optimization atomic