Wenn Sie std::atomic_flag
verwenden, muss man vorsichtig sein, es immer mit ATOMIC_FLAG_INIT
, die fehleranfällig ist, zu initialisieren. Es gibt jedoch einen Standardkonstruktor ... Also, gibt es einen objektiven Grund hinter einem Standardkonstruktor, der die Flagge in einem unspezifizierten Zustand verlässt?Warum atomic_flag default constructor den Status unspezifiziert belässt?
5
A
Antwort
0
This link (von dyp in den Kommentaren gepostet), beschreibt, dass diese Entscheidung, weil auf einigen Architekturen eine Null-initialisiert atomic_flag
gemacht wurde in einen Setzzustand entsprechen würde, und auf manchen würde es einen gelöschten Zustand entspricht. Aus diesem Grund wurde definiert, dass ein atomic_flag
, der nicht explizit mit ATOMIC_FLAG_INIT
initialisiert wird, zunächst in einem unbestimmten Zustand ist.
AFAIK, der Standardkonstruktor garantiert die Initialisierung der Variablen mit 0, aber es wird nicht angegeben, ob 0 sich auf "clear" oder "set" bezieht. Natürlich wirft das mehr Fragen auf als es beantwortet ... – 5gon12eder
Leider ist dies laut cppreference nicht einmal der Fall: * [ATOMIC_FLAG_INIT] ist die einzige Möglichkeit, std :: atomic_flag auf einen bestimmten Wert zu initialisieren: den Wert, der nach einem anderen gehalten wird Initialisierung ist nicht spezifiziert. *. Aber ich denke, es ist möglich, es auf Ihre Art zu sehen ... – Synxis
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1379.htm – dyp