Erhalten Sie nicht wirklich die Logik von std :: atomic :: compare_exchange_weak und compare_exchange_strongC++

Programme in C++. Entwicklerforum
Anonymous
 Erhalten Sie nicht wirklich die Logik von std :: atomic :: compare_exchange_weak und compare_exchange_strong

Post by Anonymous »

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post