C ++ Smart Zeiger und Speichermodell: Warum werden Inkremente nicht mit Dekrementen im Steuerblock synchronisiert?C++

Programme in C++. Entwicklerforum
Guest
 C ++ Smart Zeiger und Speichermodell: Warum werden Inkremente nicht mit Dekrementen im Steuerblock synchronisiert?

Post by Guest »

Ich habe diese Frage untersucht. Wie kann „memory_order_relaxed“ für die Erhöhung der Anzahl atomarer Referenzen in intelligenten Zeigern funktionieren? Hier noch einmal der Codeausschnitt:

Code: Select all

// Thread A:
// smart_ptr copy ctor
smart_ptr(const smart_ptr& other) {
...
control_block_ptr = other->control_block_ptr;
control_block_ptr->refs.fetch_add(1, memory_order_relaxed);
...
}

// Thread D:
// smart_ptr destructor
~smart_ptr() {
if (control_block_ptr->refs.fetch_sub(1, memory_order_acq_rel) == 1) {
delete control_block_ptr;
}
}
Ich kann immer noch nicht verstehen, warum wir für das Inkrement memory_order_relaxed haben können. >

Erhöhen des Referenzschalter Muss bereits eine erforderliche Synchronisation bereitstellen. /, wo es geschrieben wurde: < /p>

Inkrement kann gelockert werden (kein Veröffentlichungsvorgang, niemand hängt von diesem Inkrement ab). < /p>

Diese Absätze implizieren, dass diese Inkremente irgendwie unabhängig sind, und hier https://en.cppreference.com/w/cpp/atomic/Memory_order Es wird erklärt, dass entspannte Speicherreihenfolge in Ordnung ist (für ( Independent) Inkremente. Es gibt auch gleichzeitige Dekremente und sie hängen von den Schritten ab (wenn der Lesewert 1 ist, wird das Objekt gelöscht). Die Inkremente sind entspannt, sodass die Dekremente sie möglicherweise nicht sehen und das Objekt löschen. Auch wenn wir der Ansicht sind, dass RMW -Operationen immer den neuesten Wert lesen, ist die Reihenfolge der Inkremente/Dekremente, die durch verschiedene Threads beobachtet werden, immer noch unterschiedlich. Es ist also nicht klar, was ein abnehmender Thread angezeigt wird. Nicht das ein Problem und sollte nicht mit den Dekrementen synchronisiert werden? Ich kann die beiden obigen Erklärungen leider nicht verstehen: Sie sind zu kurz.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post