2013-11-26 4 views

Antwort

8

ATOMIC_FLAG_INIT ist ein implementierungsdefiniertes Makro, das garantiert in Ausdrücken wie dem von Ihnen geposteten funktioniert. Es ist praktisch zum Initialisieren einer atomic_flag, die Sie beispielsweise im Namensraumbereich definiert haben. Es garantiert auch, dass das Flag gelöscht wird und dass, wenn das Flag selbst statische Speicherdauer aufweist, die Initialisierung ebenfalls statisch ist.

Der zweite Satz von Anweisungen ist die Initialisierung gefolgt von dem Löschen des Flags. Da der Zustand atomic_flag nach dem Standardaufbau nicht spezifiziert ist, bedeutet dies, dass das Flag in einem nicht spezifizierten Zustand ist, bis die clear() ausgeführt wurde.

5

Ja (pro 29.7[atomics.flag] §4):

Das Makro ATOMIC_FLAG_INIT soll so definiert werden, dass es verwendet werden kann, ein Objekt vom Typ atomic_flag den klaren Zustand zu initialisieren. Bei einem Objekt mit statischer Dauer muss diese Initialisierung statisch sein. Es ist nicht spezifiziert, ob ein nicht initialisiertes atomic_flag Objekt einen Anfangszustand von set oder clear hat.