Erhalten Sie nicht wirklich die Logik von std :: atomic :: compare_exchange_weak und compare_exchange_strong
Posted: 18 Aug 2025, 18:34
Ich habe https://en.cppreference.com/w/cpp/atomi ... e_exchange
Atomisch die Objektdarstellung (bis c ++ 20) Wert
-Repräsentation (seit c ++, vergleicht das von c ++ 20) vergleicht. gewünscht (führt
read-modify-write-Operation ausgeführt). Andernfalls lädt der tatsächliche Wert
in *dies in erwartet (führt Lastvorgänge aus).
Nachdem die Schleife einmal ausgeführt wird (ignoriert ein falsches Versagen), wird es fehlschlagen und wird in erwartete false schreiben. In der zweiten Iteration wird Compare_Exchange_Weak Erfolg zurückgeben, obwohl B keine Änderungen an true waren. Aber was ist der Sinn von all dem? Ich obwohl ich dies als Sperre für die Synchronisation verwenden könnte und darauf warte, dass ein anderer Thread B ändert, aber jetzt kann ich mir keine Verwendung vorstellen.
Atomisch die Objektdarstellung (bis c ++ 20) Wert
-Repräsentation (seit c ++, vergleicht das von c ++ 20) vergleicht. gewünscht (führt
read-modify-write-Operation ausgeführt). Andernfalls lädt der tatsächliche Wert
in *dies in erwartet (führt Lastvorgänge aus).
Code: Select all
bool expected=true;
extern atomic b = false;
void foo ()
{
//
while(!b.compare_exchange_weak(expected, false));
//
}
Code: Select all
#include
#include
std::atomic ai;
int tst_val= 4;
int new_val= 5;
bool exchanged= false;
void valsout()
{
std::cout