diff options
Diffstat (limited to 'devdocs/c/atomic.html')
| -rw-r--r-- | devdocs/c/atomic.html | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/devdocs/c/atomic.html b/devdocs/c/atomic.html new file mode 100644 index 00000000..e0c45c68 --- /dev/null +++ b/devdocs/c/atomic.html @@ -0,0 +1,109 @@ + <h1 id="firstHeading" class="firstHeading">Atomic operations library</h1> <p>If the macro constant <code>__STDC_NO_ATOMICS__</code><span class="t-mark-rev t-since-c11">(C11)</span> is defined by the compiler, the header <code><stdatomic.h></code>, the keyword <code>_Atomic</code>, and all of the names listed here are not provided.</p> +<h3 id="Types"> Types</h3> <table class="t-dsc-begin"> <tr class="t-dsc-header"> <th colspan="2"> Defined in header <code><stdatomic.h></code> </th> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/memory_order" title="c/atomic/memory order"> <span class="t-lines"><span>memory_order</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> defines memory ordering constraints <br> <span class="t-mark">(enum)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_flag" title="c/atomic/atomic flag"> <span class="t-lines"><span>atomic_flag</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> lock-free atomic boolean flag <br><span class="t-mark">(struct)</span> </td> +</tr> </table> <h3 id="Macros"> Macros</h3> <table class="t-dsc-begin"> <tr class="t-dsc-header"> <th colspan="2"> Defined in header <code><stdatomic.h></code> </th> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_lock_free_consts" title="c/atomic/ATOMIC LOCK FREE consts"> <span class="t-lines"><span>ATOMIC_BOOL_LOCK_FREE</span><span>ATOMIC_CHAR_LOCK_FREE</span><span>ATOMIC_CHAR16_T_LOCK_FREE</span><span>ATOMIC_CHAR32_T_LOCK_FREE</span><span>ATOMIC_WCHAR_T_LOCK_FREE</span><span>ATOMIC_SHORT_LOCK_FREE</span><span>ATOMIC_INT_LOCK_FREE</span><span>ATOMIC_LONG_LOCK_FREE</span><span>ATOMIC_LLONG_LOCK_FREE</span><span>ATOMIC_POINTER_LOCK_FREE</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> indicates that the given atomic type is lock-free <br> <span class="t-mark">(macro constant)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_flag_init" title="c/atomic/ATOMIC FLAG INIT"> <span class="t-lines"><span>ATOMIC_FLAG_INIT</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> initializes a new <code><a href="http://en.cppreference.com/w/c/atomic/atomic_flag"><span class="kw917">atomic_flag</span></a></code> <br> <span class="t-mark">(macro constant)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_var_init" title="c/atomic/ATOMIC VAR INIT"> <span class="t-lines"><span>ATOMIC_VAR_INIT</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span><span class="t-mark-rev t-deprecated-c17">(deprecated in C17)</span><span class="t-mark-rev t-until-c23">(removed in C23)</span></span></span></div> </td> <td> initializes a new atomic object <br> <span class="t-mark">(function macro)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/kill_dependency" title="c/atomic/kill dependency"> <span class="t-lines"><span>kill_dependency</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> breaks a dependency chain for <code><a href="http://en.cppreference.com/w/c/atomic/memory_order"><span class="kw912">memory_order_consume</span></a></code> <br> <span class="t-mark">(function macro)</span> </td> +</tr> </table> <h3 id="Functions"> Functions</h3> <table class="t-dsc-begin"> <tr class="t-dsc-header"> <th colspan="2"> Defined in header <code><stdatomic.h></code> </th> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_flag_test_and_set" title="c/atomic/atomic flag test and set"> <span class="t-lines"><span>atomic_flag_test_and_set</span><span>atomic_flag_test_and_set_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> sets an atomic_flag to true and returns the old value <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_flag_clear" title="c/atomic/atomic flag clear"> <span class="t-lines"><span>atomic_flag_clear</span><span>atomic_flag_clear_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> sets an atomic_flag to false <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_init" title="c/atomic/atomic init"> <span class="t-lines"><span>atomic_init</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> initializes an existing atomic object <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_is_lock_free" title="c/atomic/atomic is lock free"> <span class="t-lines"><span>atomic_is_lock_free</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> indicates whether the atomic object is lock-free <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_store" title="c/atomic/atomic store"> <span class="t-lines"><span>atomic_store</span><span>atomic_store_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> stores a value in an atomic object <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_load" title="c/atomic/atomic load"> <span class="t-lines"><span>atomic_load</span><span>atomic_load_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> reads a value from an atomic object <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_exchange" title="c/atomic/atomic exchange"> <span class="t-lines"><span>atomic_exchange</span><span>atomic_exchange_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> swaps a value with the value of an atomic object <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_compare_exchange" title="c/atomic/atomic compare exchange"> <span class="t-lines"><span>atomic_compare_exchange_strong</span><span>atomic_compare_exchange_strong_explicit</span><span>atomic_compare_exchange_weak</span><span>atomic_compare_exchange_weak_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_fetch_add" title="c/atomic/atomic fetch add"> <span class="t-lines"><span>atomic_fetch_add</span><span>atomic_fetch_add_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> atomic addition <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_fetch_sub" title="c/atomic/atomic fetch sub"> <span class="t-lines"><span>atomic_fetch_sub</span><span>atomic_fetch_sub_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> atomic subtraction <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_fetch_or" title="c/atomic/atomic fetch or"> <span class="t-lines"><span>atomic_fetch_or</span><span>atomic_fetch_or_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> atomic bitwise OR <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_fetch_xor" title="c/atomic/atomic fetch xor"> <span class="t-lines"><span>atomic_fetch_xor</span><span>atomic_fetch_xor_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> atomic bitwise exclusive OR <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_fetch_and" title="c/atomic/atomic fetch and"> <span class="t-lines"><span>atomic_fetch_and</span><span>atomic_fetch_and_explicit</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> atomic bitwise AND <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_thread_fence" title="c/atomic/atomic thread fence"> <span class="t-lines"><span>atomic_thread_fence</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> generic memory order-dependent fence synchronization primitive <br> <span class="t-mark">(function)</span> </td> +</tr> <tr class="t-dsc"> <td> <div><a href="atomic/atomic_signal_fence" title="c/atomic/atomic signal fence"> <span class="t-lines"><span>atomic_signal_fence</span></span></a></div> +<div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div> </td> <td> fence between a thread and a signal handler executed in the same thread <br> <span class="t-mark">(function)</span> </td> +</tr> </table> <h3 id="Types_2"> Types</h3> <p>The standard library offers convenience typedefs for the <a href="language/atomic" title="c/language/atomic">core language atomic types</a>.</p> +<table class="t-dsc-begin"> <tr class="t-dsc-hitem"> <th> Typedef name </th> <th> Full type name </th> +</tr> <tr class="t-dsc"> <td> <code>atomic_bool</code> </td> <td> <code>_Atomic _Bool</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_char</code> </td> <td> <code>_Atomic char</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_schar</code> </td> <td> <code>_Atomic signed char</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uchar</code> </td> <td> <code>_Atomic unsigned char</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_short</code> </td> <td> <code>_Atomic short</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_ushort</code> </td> <td> <code>_Atomic unsigned short</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int</code> </td> <td> <code>_Atomic int</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint</code> </td> <td> <code>_Atomic unsigned int</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_long</code> </td> <td> <code>_Atomic long</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_ulong</code> </td> <td> <code>_Atomic unsigned long</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_llong</code> </td> <td> <code>_Atomic long long</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_ullong</code> </td> <td> <code>_Atomic unsigned long long</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_char8_t</code> <span class="t-mark-rev t-since-c23">(C23)</span> </td> <td> <code>_Atomic char8_t</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_char16_t</code> </td> <td> <code>_Atomic char16_t</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_char32_t</code> </td> <td> <code>_Atomic char32_t</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_wchar_t</code> </td> <td> <code>_Atomic wchar_t</code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_least8_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw114">int_least8_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_least8_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw128">uint_least8_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_least16_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw115">int_least16_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_least16_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw129">uint_least16_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_least32_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw116">int_least32_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_least32_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw130">uint_least32_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_least64_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw117">int_least64_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_least64_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw131">uint_least64_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_fast8_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw110">int_fast8_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_fast8_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw124">uint_fast8_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_fast16_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw111">int_fast16_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_fast16_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw125">uint_fast16_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_fast32_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw112">int_fast32_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_fast32_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw126">uint_fast32_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_int_fast64_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw113">int_fast64_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uint_fast64_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw127">uint_fast64_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_intptr_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw119">intptr_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uintptr_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw133">uintptr_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_size_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/size_t"><span class="kw100">size_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_ptrdiff_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/ptrdiff_t"><span class="kw101">ptrdiff_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_intmax_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw118">intmax_t</span></a></code> </td> +</tr> <tr class="t-dsc"> <td> <code>atomic_uintmax_t</code> </td> <td> <code>_Atomic <a href="http://en.cppreference.com/w/c/types/integer"><span class="kw132">uintmax_t</span></a></code> </td> +</tr> </table> <h3 id="References"> References</h3> <ul> +<li> C23 standard (ISO/IEC 9899:2023): </li> +<ul> +<li> 7.17 Atomics <stdatomic.h> (p: TBD) </li> +<li> 7.31.8 Atomics <stdatomic.h> (p: TBD) </li> +</ul> +<li> C17 standard (ISO/IEC 9899:2018): </li> +<ul> +<li> 7.17 Atomics <stdatomic.h> (p: TBD) </li> +<li> 7.31.8 Atomics <stdatomic.h> (p: TBD) </li> +</ul> +<li> C11 standard (ISO/IEC 9899:2011): </li> +<ul> +<li> 7.17 Atomics <stdatomic.h> (p: 273-286) </li> +<li> 7.31.8 Atomics <stdatomic.h> (p: 455-456) </li> +</ul> +</ul> <h3 id="See_also"> See also</h3> <table class="t-dsc-begin"> <tr class="t-dsc"> <td colspan="2"> <span><a href="https://en.cppreference.com/w/cpp/atomic" title="cpp/atomic">C++ documentation</a></span> for <span class=""><span>Atomic operations library</span></span> </td> +</tr> </table> <div class="_attribution"> + <p class="_attribution-p"> + © cppreference.com<br>Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.<br> + <a href="https://en.cppreference.com/w/c/atomic" class="_attribution-link">https://en.cppreference.com/w/c/atomic</a> + </p> +</div> |
