by Anonymous » 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).
Code: Select all
bool expected=true;
extern atomic b = false;
void foo ()
{
//
while(!b.compare_exchange_weak(expected, false));
//
}
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.
Code: Select all
#include
#include
std::atomic ai;
int tst_val= 4;
int new_val= 5;
bool exchanged= false;
void valsout()
{
std::cout
Ich habe https://en.cppreference.com/w/cpp/atomic/atomic/compare_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).[code]bool expected=true;
extern atomic b = false;
void foo ()
{
//
while(!b.compare_exchange_weak(expected, false));
//
}
[/code]
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.[code]#include
#include
std::atomic ai;
int tst_val= 4;
int new_val= 5;
bool exchanged= false;
void valsout()
{
std::cout