Warum das Stop -Flag mit `memory_order_seq_cst` festlegen, wenn Sie es mit` memory_order_relaxed` überprüfen?C++

Programme in C++. Entwicklerforum
Guest
 Warum das Stop -Flag mit `memory_order_seq_cst` festlegen, wenn Sie es mit` memory_order_relaxed` überprüfen?

Post by Guest »

Herb Sutter zeigt in seinem "Atomic Weapons" -Ver Vortrag mehrere Beispielanwendungen von Atomik, und einer von ihnen läuft darauf hinaus: (Videolink, Zeitstempel) < /p>
< Br /> [*] Ein Hauptfaden startet mehrere Arbeiter -Threads. Br />

Code: Select all

while (!stop.load(std::memory_order_relaxed))
{
// Do stuff.
}
Der Haupt -Thread stoppt schließlich stop = true; (Hinweis, mit order = order =

Code: Select all

seq_cst
) und schließt sich dann den Arbeitern an.

Code: Select all

relaxed
ist in Ordnung, denn wen interessiert es, ob der Thread mit einer etwas größeren Verzögerung stoppt. Code>? Die Folie besagt, dass es absichtlich nicht entspannt ist , aber nicht erklärt warum . Verzögerung. < /p>
Ist es ein Kompromiss zwischen der Leistung und wie schnell andere Threads das Flag sehen? D.h. Da der Haupt -Thread das Flag nur einmal festlegt, können wir genauso gut die stärkste Bestellung verwenden, um die Nachricht so schnell wie möglich zu vermitteln?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post