Difference between revisions of "cpp/atomic/ATOMIC FLAG INIT"
From cppreference.com
(LWG3659) |
(Added LWG issue #2159 DR.) |
||
Line 1: | Line 1: | ||
{{title|ATOMIC_FLAG_INIT}} | {{title|ATOMIC_FLAG_INIT}} | ||
{{cpp/thread/navbar}} | {{cpp/thread/navbar}} | ||
− | {{ | + | {{ddcl|header=atomic|since=c++11| |
− | + | ||
− | + | ||
#define ATOMIC_FLAG_INIT /* implementation-defined */ | #define ATOMIC_FLAG_INIT /* implementation-defined */ | ||
}} | }} | ||
− | |||
− | Defines the initializer which can be used to initialize {{lc|std::atomic_flag}} to clear (false) state | + | Defines the initializer which can be used to initialize {{lc|std::atomic_flag}} to clear (false) state in the form {{c|1=std::atomic_flag v = ATOMIC_FLAG_INIT;}}. It is unspecified if it can be used with other initialization contexts. |
− | If the flag has | + | If the flag has is a [[cpp/language/object#Subobjects|complete object]] with {{lsd|cpp/language/storage_duration#Static storage duration}}, this [[cpp/language/initialization#Static initialization|initialization is static]]. |
− | {{ | + | {{rev begin}} |
− | | | + | {{rev|until=c++20| |
This is the only way to initialize {{lc|std::atomic_flag}} to a definite value: the value held after any other initialization is unspecified. | This is the only way to initialize {{lc|std::atomic_flag}} to a definite value: the value held after any other initialization is unspecified. | ||
− | | | + | }} |
+ | {{rev|since=c++20| | ||
This macro is no longer needed since default constructor of {{lc|std::atomic_flag}} initializes it to clear state. It is kept for the compatibility with C. | This macro is no longer needed since default constructor of {{lc|std::atomic_flag}} initializes it to clear state. It is kept for the compatibility with C. | ||
}} | }} | ||
+ | {{rev end}} | ||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | + | | | |
− | + | |code= | |
#include <atomic> | #include <atomic> | ||
Line 33: | Line 32: | ||
// std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // unspecified | // std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // unspecified | ||
} | } | ||
− | + | |output= | |
}} | }} | ||
===Defect reports=== | ===Defect reports=== | ||
{{dr list begin}} | {{dr list begin}} | ||
+ | {{dr list item|wg=lwg|dr=2159|std=C++11|before=it was unclear whether {{tt|ATOMIC_FLAG_INIT}}<br>can be used with other initialization contexts|after=other usages are<br>not guaranteed}} | ||
{{dr list item|wg=lwg|dr=3659|std=C++20|before={{tt|ATOMIC_FLAG_INIT}} was deprecated, but needed in C on some platforms|after=it is undeprecated}} | {{dr list item|wg=lwg|dr=3659|std=C++20|before={{tt|ATOMIC_FLAG_INIT}} was deprecated, but needed in C on some platforms|after=it is undeprecated}} | ||
{{dr list end}} | {{dr list end}} | ||
Line 43: | Line 43: | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/atomic/dsc atomic_flag}} | + | {{dsc inc|cpp/atomic/dsc atomic_flag}} |
− | {{dsc see c | c/atomic/ATOMIC_FLAG_INIT}} | + | {{dsc see c|c/atomic/ATOMIC_FLAG_INIT}} |
{{dsc end}} | {{dsc end}} | ||
{{langlinks|de|es|fr|it|ja|pt|ru|zh}} | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} |
Latest revision as of 18:13, 17 October 2024
Defined in header <atomic>
|
||
#define ATOMIC_FLAG_INIT /* implementation-defined */ |
(since C++11) | |
Defines the initializer which can be used to initialize std::atomic_flag to clear (false) state in the form std::atomic_flag v = ATOMIC_FLAG_INIT;. It is unspecified if it can be used with other initialization contexts.
If the flag has is a complete object with static storage duration, this initialization is static.
This is the only way to initialize std::atomic_flag to a definite value: the value held after any other initialization is unspecified. |
(until C++20) |
This macro is no longer needed since default constructor of std::atomic_flag initializes it to clear state. It is kept for the compatibility with C. |
(since C++20) |
[edit] Example
Run this code
#include <atomic> std::atomic_flag static_flag = ATOMIC_FLAG_INIT; // static initialization, // guaranteed to be available during dynamic initialization of static objects. int main() { std::atomic_flag automatic_flag = ATOMIC_FLAG_INIT; // guaranteed to work // std::atomic_flag another_flag(ATOMIC_FLAG_INIT); // unspecified }
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2159 | C++11 | it was unclear whether ATOMIC_FLAG_INIT can be used with other initialization contexts |
other usages are not guaranteed |
LWG 3659 | C++20 | ATOMIC_FLAG_INIT was deprecated, but needed in C on some platforms
|
it is undeprecated |
[edit] See also
(C++11) |
the lock-free boolean atomic type (class) |
C documentation for ATOMIC_FLAG_INIT
|