Difference between revisions of "cpp/atomic/atomic init"
From cppreference.com
m (Update links.) |
(Splitted the volatile overloads.) |
||
(9 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|atomic_init}} | {{cpp/title|atomic_init}} | ||
− | {{cpp/ | + | {{cpp/thread/navbar}} |
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl header | atomic}} | + | {{dcl header|atomic}} |
− | {{dcl | | + | {{dcl|num=1|since=c++11|deprecated=c++20| |
template< class T > | template< class T > | ||
− | void atomic_init( std::atomic<T>* obj, T desired ); | + | void atomic_init |
+ | ( std::atomic<T>* obj, | ||
+ | typename std::atomic<T>::value_type desired ) noexcept; | ||
}} | }} | ||
− | {{dcl | | + | {{dcl|num=2|since=c++11|deprecated=c++20| |
template< class T > | template< class T > | ||
− | void atomic_init( volatile std::atomic<T>* obj, T desired ); | + | void atomic_init |
+ | ( volatile std::atomic<T>* obj, | ||
+ | typename std::atomic<T>::value_type desired ) noexcept; | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | Initializes the default-constructed atomic object {{ | + | Initializes the default-constructed atomic object {{c|obj}} with the value {{c|desired}}. The function is not atomic: concurrent access from another thread, even through an atomic operation, is a data race. |
− | If {{ | + | If {{c|obj}} was not default-constructed, or this function is called twice on the same {{c|obj}}, the behavior is undefined. |
− | + | ||
− | + | ||
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | obj | pointer to an atomic object to initialize}} | + | {{par|obj|pointer to an atomic object to initialize}} |
− | {{par | desired | the value to initialize atomic object with}} | + | {{par|desired|the value to initialize atomic object with}} |
{{par end}} | {{par end}} | ||
===Return value=== | ===Return value=== | ||
(none) | (none) | ||
− | |||
− | |||
− | |||
===Notes=== | ===Notes=== | ||
Line 35: | Line 34: | ||
===Example=== | ===Example=== | ||
− | {{example | + | {{example}} |
− | + | ||
− | + | ===Defect reports=== | |
− | + | {{dr list begin}} | |
− | }} | + | {{dr list item|std=C++11|paper=P0558R1|before=exact type match was required because<br>{{tt|T}} was deduced from multiple arguments|after={{tt|T}} is only deduced<br>from {{c|obj}}}} |
+ | {{dr list end}} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/atomic/dsc ATOMIC_VAR_INIT}} | + | {{dsc inc|cpp/atomic/dsc ATOMIC_VAR_INIT}} |
− | {{dsc inc | cpp/atomic/atomic/dsc constructor}} | + | {{dsc inc|cpp/atomic/atomic/dsc constructor}} |
− | {{dsc see c | c/atomic/atomic_init}} | + | {{dsc see c|c/atomic/atomic_init}} |
{{dsc end}} | {{dsc end}} | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 22:45, 20 September 2023
Defined in header <atomic>
|
||
template< class T > void atomic_init |
(1) | (since C++11) (deprecated in C++20) |
template< class T > void atomic_init |
(2) | (since C++11) (deprecated in C++20) |
Initializes the default-constructed atomic object obj with the value desired. The function is not atomic: concurrent access from another thread, even through an atomic operation, is a data race.
If obj was not default-constructed, or this function is called twice on the same obj, the behavior is undefined.
Contents |
[edit] Parameters
obj | - | pointer to an atomic object to initialize |
desired | - | the value to initialize atomic object with |
[edit] Return value
(none)
[edit] Notes
This function is provided for compatibility with C. If the compatibility is not required, std::atomic may be initialized through their non-default constructors.
[edit] Example
This section is incomplete Reason: no example |
[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 |
---|---|---|---|
P0558R1 | C++11 | exact type match was required becauseT was deduced from multiple arguments
|
T is only deducedfrom obj |
[edit] See also
(C++11)(deprecated in C++20) |
constant initialization of an atomic variable of static storage duration (function macro) |
constructs an atomic object (public member function of std::atomic<T> )
| |
C documentation for atomic_init
|