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

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum das Stop -Flag mit `memory_order_seq_cst` festlegen, wenn Sie es mit` memory_order_relaxed` überprüfen?

by Guest » 08 Feb 2025, 16:49

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?

Top