libstdc++
stdatomic.h
Go to the documentation of this file.
1// C compatibility header <stdatomic.h> -*- C++ -*-
2
3// Copyright The GNU Toolchain Authors.
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// Under Section 7 of GPL version 3, you are granted additional
17// permissions described in the GCC Runtime Library Exception, version
18// 3.1, as published by the Free Software Foundation.
19
20// You should have received a copy of the GNU General Public License and
21// a copy of the GCC Runtime Library Exception along with this program;
22// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23// <http://www.gnu.org/licenses/>.
24
25/** @file include/stdatomic.h
26 * This is a Standard C++ Library header.
27 */
28
29#ifndef _GLIBCXX_STDATOMIC_H
30#define _GLIBCXX_STDATOMIC_H
31
32#define __glibcxx_want_stdatomic_h
33#include <bits/version.h>
34
35#ifdef __cpp_lib_stdatomic_h // C++ >= 23
36#include <atomic>
37
38#define _Atomic(_Tp) ::std::atomic<_Tp>
39
41using std::memory_order_relaxed;
42using std::memory_order_consume;
43using std::memory_order_acquire;
44using std::memory_order_release;
45using std::memory_order_acq_rel;
46using std::memory_order_seq_cst;
54using std::atomic_int;
60#ifdef _GLIBCXX_USE_CHAR8_T
61using std::atomic_char8_t;
62#endif
66#ifdef _GLIBCXX_USE_C99_STDINT
91#endif
96#ifdef _GLIBCXX_USE_C99_STDINT
99#endif
100using std::atomic_is_lock_free;
101using std::atomic_load;
102using std::atomic_load_explicit;
103using std::atomic_store;
104using std::atomic_store_explicit;
105using std::atomic_exchange;
106using std::atomic_exchange_explicit;
107using std::atomic_compare_exchange_strong;
108using std::atomic_compare_exchange_strong_explicit;
109using std::atomic_compare_exchange_weak;
110using std::atomic_compare_exchange_weak_explicit;
111using std::atomic_fetch_add;
112using std::atomic_fetch_add_explicit;
113using std::atomic_fetch_sub;
114using std::atomic_fetch_sub_explicit;
115using std::atomic_fetch_or;
116using std::atomic_fetch_or_explicit;
117using std::atomic_fetch_xor;
118using std::atomic_fetch_xor_explicit;
119using std::atomic_fetch_and;
120using std::atomic_fetch_and_explicit;
121using std::atomic_flag_test_and_set;
122using std::atomic_flag_test_and_set_explicit;
123using std::atomic_flag_clear;
124using std::atomic_flag_clear_explicit;
125using std::atomic_thread_fence;
126using std::atomic_signal_fence;
127
128#elif defined __clang__
129# include_next <stdatomic.h>
130#endif // __cpp_lib_stdatomic_h
131#endif // _GLIBCXX_STDATOMIC_H
memory_order
Enumeration for memory_order.
Definition atomic_base.h:65
Generic atomic type, primary class template.
atomic<bool>
Definition atomic:68
Explicit specialization for char.
Definition atomic:713
Explicit specialization for signed char.
Definition atomic:736
Explicit specialization for unsigned char.
Definition atomic:759
Explicit specialization for short.
Definition atomic:782
Explicit specialization for unsigned short.
Definition atomic:805
Explicit specialization for int.
Definition atomic:828
Explicit specialization for unsigned int.
Definition atomic:851
Explicit specialization for long.
Definition atomic:874
Explicit specialization for unsigned long.
Definition atomic:897
Explicit specialization for long long.
Definition atomic:920
Explicit specialization for unsigned long long.
Definition atomic:943
Explicit specialization for wchar_t.
Definition atomic:966
Explicit specialization for char16_t.
Definition atomic:1015
Explicit specialization for char32_t.
Definition atomic:1039
atomic_flag