Ich möchte wissen, ist es möglich, Vergleich und Inkrement einer atomaren Variablen mit einer einzigen atomaren Operation durchzuführen. Dies ist, was ich geschrieben habe, so weit (Snippet-Code eines Threads)Wie man eine atomare Variable vergleicht und inkrementiert
std::atomic<int> counter; //global variable
if(counter<25)
{
counter++;
}
else
{
//send serial/socket data
}
Ich weiß, dass ich falsch mache, da Atom Variable Zähler zweimal zugegriffen wird (einmal für die Daten und andere für Zuwachs bekommen). Dies kann jedoch ein Problem verursachen, wenn ein anderer Thread nach dem Abrufen des Variablenwerts und vor dem Inkrementieren eine Aktualisierungsoperation für den Zähler ausführt. Also möchte ich wissen, ob es möglich ist, beide Operationen in einem einzigen Schuss auszuführen. Außerdem möchte ich Mutex nicht verwenden.
Ihr Codebeispiel erscheint zwei verschiedene Top-Level-Variablen zu zeigen, dass beide Namen sind 'NoOfTimesSent' . Einer von ihnen wird als "atomar" deklariert, und der andere wird als "int" deklariert. Aber es sieht so aus, als hätten Sie einen Code weggelassen. Was geht wo die "..." sind? –
@james Ich habe die Frage nach Ihrer Anfrage aktualisiert. Anfangs werde ich den Wert von counter im Hauptthread auf 1 setzen. – Harry
@Harry Wenn Sie Ihr Snippet betrachten, scheint es, dass Sie nicht zulassen wollen, dass mehrere Threads auf einen der 'if else'-Blöcke zugreifen. In diesem Fall bin ich mir ziemlich sicher, dass du einen Mutex brauchst. – freakish