Concurrency support library
C++は、スレッド、アトミック操作、相互排他、条件変数、およびスレッド固有ストレージの組み込みサポートを含みます。
これらの機能はオプションで提供されます:
-
コンパイラによってマクロ定数
__STDC_NO_THREADS__が定義されている場合、ヘッダ <threads.h> およびそこで提供されるすべての名前は提供されない。 -
コンパイラによってマクロ定数
__STDC_NO_ATOMICS__が定義されている場合、ヘッダ <stdatomic.h> およびそこで提供されるすべての名前は提供されない。
関連項目
_Atomic
型指定子と型修飾子
。
目次 |
スレッド
|
定義済みヘッダ
<threads.h>
|
|
thrd_t
|
スレッドを識別する実装定義の完全オブジェクト型 |
|
(C11)
|
スレッドを作成する
(関数) |
|
(C11)
|
2つの識別子が同じスレッドを参照するかどうかをチェックする
(関数) |
|
(C11)
|
現在のスレッド識別子を取得する
(関数) |
|
(C11)
|
呼び出しスレッドの実行を指定期間一時停止する
(関数) |
|
(C11)
|
現在のタイムスライスを明け渡す
(関数) |
|
(C11)
|
呼び出しスレッドを終了する
(関数) |
|
(C11)
|
スレッドをデタッチする
(関数) |
|
(C11)
|
スレッドが終了するまでブロックする
(関数) |
|
スレッドエラーステータスを示す
(定数) |
|
|
thrd_start_t
(C11)
|
関数ポインタ型のtypedef
int
(
*
)
(
void
*
)
,
thrd_create
で使用される
(typedef) |
アトミック操作
|
ヘッダーで定義
<stdatomic.h>
|
|
アトミック型に対する操作 |
|
|
指定されたアトミック型がロックフリーであることを示す
(マクロ定数) |
|
|
(C11)
|
アトミックオブジェクトがロックフリーかどうかを示す
(関数) |
|
アトミックオブジェクトに値を格納する
(関数) |
|
|
アトミックオブジェクトから値を読み取る
(関数) |
|
|
アトミックオブジェクトの値と値を交換する
(関数) |
|
|
期待される値と一致する場合に値をアトミックオブジェクトと交換し、それ以外の場合には古い値を読み取る
(関数) |
|
|
アトミック加算
(関数) |
|
|
アトミック減算
(関数) |
|
|
アトミックビット単位OR
(関数) |
|
|
アトミックビット単位排他的論理和
(関数) |
|
|
アトミックビット単位AND
(関数) |
|
フラグ型と操作 |
|
|
(C11)
|
ロックフリーなアトミックブーリアンフラグ
(構造体) |
|
アトミックフラグをtrueに設定し、以前の値を返す
(関数) |
|
|
アトミックフラグをfalseに設定する
(関数) |
|
初期化 |
|
|
(C11)
|
既存のアトミックオブジェクトを初期化する
(関数) |
|
(C11)
(C17で非推奨)
(C23で削除)
|
新しいアトミックオブジェクトを初期化する
(関数マクロ) |
|
(C11)
|
新しい
atomic_flag
を初期化する
(マクロ定数) |
メモリ同期順序 |
|
|
(C11)
|
メモリ順序制約を定義する
(列挙型) |
|
(C11)
|
memory_order_consume
の依存チェーンを解除します
(関数マクロ) |
|
(C11)
|
メモリ順序依存の汎用フェンス同期プリミティブ
(関数) |
|
(C11)
|
同じスレッド内で実行されるスレッドとシグナルハンドラ間のフェンス
(関数) |
便利な型エイリアス |
|
| 型定義名 | 完全な型名 |
atomic_bool
(C11)
|
_Atomic _Bool (C23まで) _Atomic bool (C23以降) |
atomic_char
(C11)
|
_Atomic char |
atomic_schar
(C11)
|
_Atomic signed char |
atomic_schar
(C11)
|
_Atomic signed char |
atomic_uchar
(C11)
|
_Atomic unsigned char |
atomic_uchar
(C11)
|
_Atomic unsigned char |
atomic_short
(C11)
|
_Atomic short |
atomic_ushort
(C11)
|
_Atomic unsigned short |
atomic_int
(C11)
|
_Atomic int |
atomic_int
(C11)
|
_Atomic int |
atomic_uint
(C11)
|
_Atomic unsigned int |
atomic_uint
(C11)
|
_Atomic unsigned int |
atomic_long
(C11)
|
_Atomic long |
atomic_long
(C11)
|
_Atomic long |
atomic_ulong
(C11)
|
_Atomic unsigned long |
atomic_ulong
(C11)
|
_Atomic unsigned long |
atomic_llong
(C11)
|
_Atomic long long |
atomic_ullong
(C11)
|
_Atomic unsigned long long |
atomic_ullong
(C11)
|
_Atomic unsigned long long |
atomic_char8_t
(C23)
|
_Atomic char8_t |
atomic_char16_t
(C11)
|
_Atomic char16_t |
atomic_char16_t
(C11)
|
_Atomic char16_t |
atomic_char32_t
(C11)
|
_Atomic char32_t |
atomic_wchar_t
(C11)
|
_Atomic wchar_t |
atomic_wchar_t
(C11)
|
_Atomic wchar_t |
atomic_int_least8_t
(C11)
|
_Atomic int_least8_t |
atomic_int_least8_t
(C11)
|
_Atomic int_least8_t |
atomic_uint_least8_t
(C11)
|
_Atomic uint_least8_t |
atomic_uint_least8_t
(C11)
|
_Atomic uint_least8_t |
atomic_int_least16_t
(C11)
|
_Atomic int_least16_t |
atomic_int_least16_t
(C11)
|
_Atomic int_least16_t |
atomic_uint_least16_t
(C11)
|
_Atomic uint_least16_t |
atomic_uint_least16_t
(C11)
|
_Atomic uint_least16_t |
atomic_int_least32_t
(C11)
|
_Atomic int_least32_t |
atomic_int_least32_t
(C11)
|
_Atomic int_least32_t |
atomic_uint_least32_t
(C11)
|
_Atomic uint_least32_t |
atomic_uint_least32_t
(C11)
|
_Atomic uint_least32_t |
atomic_int_least64_t
(C11)
|
_Atomic int_least64_t |
atomic_int_least64_t
(C11)
|
_Atomic int_least64_t |
atomic_uint_least64_t
(C11)
|
_Atomic uint_least64_t |
atomic_uint_least64_t
(C11)
|
_Atomic uint_least64_t |
atomic_int_fast8_t
(C11)
|
_Atomic int_fast8_t |
atomic_int_fast8_t
(C11)
|
_Atomic int_fast8_t |
atomic_uint_fast8_t
(C11)
|
_Atomic uint_fast8_t |
atomic_uint_fast8_t
(C11)
|
_Atomic uint_fast8_t |
atomic_int_fast16_t
(C11)
|
_Atomic int_fast16_t |
atomic_int_fast16_t
(C11)
|
_Atomic int_fast16_t |
atomic_uint_fast16_t
(C11)
|
_Atomic uint_fast16_t |
atomic_uint_fast16_t
(C11)
|
_Atomic uint_fast16_t |
atomic_int_fast32_t
(C11)
|
_Atomic int_fast32_t |
atomic_int_fast32_t
(C11)
|
_Atomic int_fast32_t |
atomic_uint_fast32_t
(C11)
|
_Atomic uint_fast32_t |
atomic_uint_fast32_t
(C11)
|
_Atomic uint_fast32_t |
atomic_int_fast64_t
(C11)
|
_Atomic int_fast64_t |
atomic_int_fast64_t
(C11)
|
_Atomic int_fast64_t |
atomic_uint_fast64_t
(C11)
|
_Atomic uint_fast64_t |
atomic_uint_fast64_t
(C11)
|
_Atomic uint_fast64_t |
atomic_intptr_t
(C11)
|
_Atomic intptr_t |
atomic_intptr_t
(C11)
|
_Atomic intptr_t |
atomic_uintptr_t
(C11)
|
_Atomic uintptr_t |
atomic_uintptr_t
(C11)
|
_Atomic uintptr_t |
atomic_size_t
(C11)
|
_Atomic size_t |
atomic_size_t
(C11)
|
_Atomic size_t |
atomic_ptrdiff_t
(C11)
|
_Atomic ptrdiff_t |
atomic_ptrdiff_t
(C11)
|
_Atomic ptrdiff_t |
atomic_intmax_t
(C11)
|
_Atomic intmax_t |
atomic_intmax_t
(C11)
|
_Atomic intmax_t |
atomic_uintmax_t
(C11)
|
_Atomic uintmax_t |
atomic_uintmax_t
(C11)
|
_Atomic uintmax_t |
相互排他
|
ヘッダで定義
<threads.h>
|
|
mtx_t
|
ミューテックス識別子 |
|
(C11)
|
ミューテックスを作成する
(関数) |
|
(C11)
|
ミューテックスをロックするまでブロックする
(関数) |
|
(C11)
|
ミューテックスをロックするかタイムアウトするまでブロックする
(関数) |
|
(C11)
|
ミューテックスをロックするか、既にロックされている場合はブロックせずに返る
(関数) |
|
(C11)
|
ミューテックスをアンロックする
(関数) |
|
(C11)
|
ミューテックスを破棄する
(関数) |
|
(C11)
(C11)
(C11)
|
ミューテックスの型を定義する
(列挙型) |
一度だけの呼び出し |
|
|
(C11)
|
関数を正確に一度だけ呼び出す
(関数) |
条件変数
|
ヘッダーで定義
<threads.h>
|
|
cnd_t
|
条件変数識別子 |
|
(C11)
|
条件変数を作成する
(関数) |
|
(C11)
|
条件変数でブロックされている1つのスレッドのブロックを解除する
(関数) |
|
(C11)
|
条件変数でブロックされているすべてのスレッドのブロックを解除する
(関数) |
|
(C11)
|
条件変数でブロックする
(関数) |
|
(C11)
|
条件変数でブロックする(タイムアウト付き)
(関数) |
|
(C11)
|
条件変数を破棄する
(関数) |
スレッドローカルストレージ
|
ヘッダーで定義
<threads.h>
|
|
|
(C11)
(C23で削除)
|
ストレージクラス指定子
_Thread_local
の便利マクロ
(キーワードマクロ) |
tss_t
|
スレッド固有ストレージポインタ |
|
(C11)
|
デストラクタが呼び出される最大回数
(マクロ定数) |
tss_dtor_t
(C11)
|
関数ポインタ型
void
(
*
)
(
void
*
)
, TSSデストラクタに使用
(typedef) |
|
(C11)
|
指定されたデストラクタでスレッド固有ストレージポインタを作成
(関数) |
|
(C11)
|
スレッド固有ストレージから読み取り
(関数) |
|
(C11)
|
スレッド固有ストレージへ書き込み
(関数) |
|
(C11)
|
指定されたスレッド固有ポインタが保持するリソースを解放
(関数) |
予約識別子
C標準の将来の改訂において:
-
cnd_、mtx_、thrd_、またはtss_で始まり、その後ろに小文字が続く関数名、型名、列挙定数は、<threads.h>ヘッダーの宣言に追加される可能性があります。 -
ATOMIC_で始まり、その後ろに大文字が続くマクロは、 <stdatomic.h> ヘッダーで定義されるマクロに追加される可能性があります。 -
atomic_またはmemory_で始まり、その後ろに小文字が続くtypedef名は、 <stdatomic.h> ヘッダーの宣言に追加される可能性があります。 -
memory_order_で始まり、その後ろに小文字が続く列挙定数は、 <stdatomic.h> ヘッダー内の memory_order 型の定義に追加される可能性があります。 -
atomic_で始まり、その後ろに小文字が続く関数名は、 <stdatomic.h> ヘッダーの宣言に追加される可能性があります。
関数名のために予約されている識別子は常に 潜在的には (C23以降) 外部リンケージを持つ識別子として使用するために予約されていますが、ここにリストされている他の識別子は 潜在的には (C23以降) 予約されます <stdatomic.h> がインクルードされた場合。
そのような識別子を宣言、定義、または #undef することは未定義動作を引き起こす 標準または実装によって提供される場合 (C23以降) 。移植性のあるプログラムはこれらの識別子を使用すべきではない。
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.17 Atomics <stdatomic.h> (p: TBD)
-
- 7.26 Threads <threads.h> (p: TBD)
-
- 7.31.8 Atomics <stdatomic.h> (p: TBD)
-
- 7.31.15 Threads <threads.h> (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.17 アトミック操作 <stdatomic.h> (p: 200-209)
-
- 7.26 スレッド <threads.h> (p: 274-283)
-
- 7.31.8 アトミック操作 <stdatomic.h> (p: 332)
-
- 7.31.15 スレッド <threads.h> (p: 333)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.17 アトミック操作 <stdatomic.h> (p: 273-286)
-
- 7.26 スレッド <threads.h> (p: 376-387)
-
- 7.31.8 アトミック操作 <stdatomic.h> (p: 455-456)
-
- 7.31.15 スレッド <threads.h> (p: 456)
関連項目
|
C++ documentation
for
Concurrency support library
|
|
C++ documentation
for
Concurrency support library
|
、
、
外部リンク
| GNU GCC Libc マニュアル: ISO C Mutexes |