2016-02-22 2 views
5

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?

+0

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

+1

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

+2

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1379.htm – dyp

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.