Ich kann mir Gründe vorstellen, wenn es nicht wichtig ist, und eine Situation, in der Sie sie NICHT verwenden möchten, wenn Sie ein Design auf Verhalten mit nicht-atomaren Operationen testen wollen.
Was sind andere Gründe? Insbesondere arbeite ich an einem Projekt mit seltenen Rennbedingungen, da ein Test keine atomaren Inkremente verwendet. Ich frage mich, warum sollte ich nicht immer atomare Inkremente verwenden, wenn eine Funktion dafür existiert?
Danke!
Weil Atomics langsamer sind. Sie verlangsamen den aufrufenden Thread, und sie können auch andere Threads verlangsamen, möglicherweise auch solche, die nicht auf dieselben Atomics zugreifen. Sie können auch verhindern, dass der Compiler bestimmte Neuordnungsoptimierungen durchführt, die er andernfalls durchführen würde.
Atomare Operationen sind potentiell und wahrscheinlich teurer als ihr nichtatomares Äquivalent. In Fällen, in denen eine Synchronisierung zwischen Threads nicht erforderlich ist, z. B. beim Aktualisieren einer nicht freigegebenen lokalen Datei, wird durch die Atomizicy unnötiger Overhead verursacht, der vermieden werden sollte.
Tags und Links c c++ multithreading atomic atomicity