並行性サポートライブラリ
From cppreference.com
< c
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) |
thrd_createによって使用される、関数ポインタ型int(*)(void*)のtypedef (typedef) |
[編集] アトミック操作
| ヘッダ
<stdatomic.h>で定義 | |
アトミック型に対する操作 | |
| 指定されたアトミック型がロックフリーであることを示す (マクロ定数) | |
| (C11) |
アトミックオブジェクトがロックフリーであるかを示す (関数) |
| アトミックオブジェクトに値を格納する (関数) | |
| アトミックオブジェクトから値を読み込む (関数) | |
| アトミックオブジェクトの値と値を交換する (関数) | |
| 古い値が期待値と同じであればアトミックオブジェクトと値を交換し、そうでなければ古い値を読み込む (関数) | |
| アトミック加算 (関数) | |
| アトミック減算 (関数) | |
| アトミックビットOR (関数) | |
| アトミックビット排他的OR (関数) | |
| アトミックビットAND (関数) | |
フラグ型と操作 | |
| (C11) |
ロックフリーアトミックブーリアンフラグ (構造体) |
| atomic_flagをtrueに設定し、古い値を返す (関数) | |
| atomic_flagをfalseに設定する (関数) | |
初期化 | |
| (C11) |
既存のアトミックオブジェクトを初期化する (関数) |
| (C11)(C17で非推奨)(C23で削除) |
新しいアトミックオブジェクトを初期化する (関数マクロ) |
| (C11) |
新しいatomic_flagを初期化する (マクロ定数) |
メモリ同期順序 | |
| (C11) |
メモリ順序制約を定義する (enum) |
| (C11) |
memory_order_consumeの依存関係チェーンを中断する (関数マクロ) |
| (C11) |
汎用的なメモリ順序依存のフェンス同期プリミティブ (関数) |
| (C11) |
スレッドと、同じスレッドで実行されるシグナルハンドラとの間のフェンス (関数) |
利便性のための型エイリアス | |
| Typedef名 | 完全型名 |
atomic_bool (C11) |
_Atomic _Bool(C23まで)_Atomic bool(C23以降) |
atomic_char (C11) |
_Atomic char |
atomic_schar (C11) |
_Atomic signed char |
atomic_uchar (C11) |
_Atomic unsigned char |
atomic_short (C11) |
_Atomic short |
atomic_ushort (C11) |
_Atomic unsigned short |
atomic_int (C11) |
_Atomic int |
atomic_uint (C11) |
_Atomic unsigned int |
atomic_long (C11) |
_Atomic long |
atomic_ulong (C11) |
_Atomic unsigned long |
atomic_llong (C11) |
_Atomic long long |
atomic_ullong (C11) |
_Atomic unsigned long long |
atomic_char8_t (C23) |
_Atomic char8_t |
atomic_char16_t (C11) |
_Atomic char16_t |
atomic_char32_t (C11) |
_Atomic char32_t |
atomic_wchar_t (C11) |
_Atomic wchar_t |
atomic_int_least8_t (C11) |
_Atomic int_least8_t |
atomic_uint_least8_t (C11) |
_Atomic uint_least8_t |
atomic_int_least16_t (C11) |
_Atomic int_least16_t |
atomic_uint_least16_t (C11) |
_Atomic uint_least16_t |
atomic_int_least32_t (C11) |
_Atomic int_least32_t |
atomic_uint_least32_t (C11) |
_Atomic uint_least32_t |
atomic_int_least64_t (C11) |
_Atomic int_least64_t |
atomic_uint_least64_t (C11) |
_Atomic uint_least64_t |
atomic_int_fast8_t (C11) |
_Atomic int_fast8_t |
atomic_uint_fast8_t (C11) |
_Atomic uint_fast8_t |
atomic_int_fast16_t (C11) |
_Atomic int_fast16_t |
atomic_uint_fast16_t (C11) |
_Atomic uint_fast16_t |
atomic_int_fast32_t (C11) |
_Atomic int_fast32_t |
atomic_uint_fast32_t (C11) |
_Atomic uint_fast32_t |
atomic_int_fast64_t (C11) |
_Atomic int_fast64_t |
atomic_uint_fast64_t (C11) |
_Atomic uint_fast64_t |
atomic_intptr_t (C11) |
_Atomic intptr_t |
atomic_uintptr_t (C11) |
_Atomic uintptr_t |
atomic_size_t (C11) |
_Atomic size_t |
atomic_ptrdiff_t (C11) |
_Atomic ptrdiff_t |
atomic_intmax_t (C11) |
_Atomic intmax_t |
atomic_uintmax_t (C11) |
_Atomic uintmax_t |
[編集] 相互排他
| ヘッダ
<threads.h>で定義 | |
mtx_t
|
ミューテックス識別子 |
| (C11) |
ミューテックスを作成する (関数) |
| (C11) |
ミューテックスがロックされるまでブロックする (関数) |
| (C11) |
ミューテックスがロックされるか、タイムアウトするまでブロックする (関数) |
| (C11) |
ミューテックスをロックするか、既にロックされている場合はブロックせずに戻る (関数) |
| (C11) |
ミューテックスのロックを解除する (関数) |
| (C11) |
ミューテックスを破棄する (関数) |
| (C11)(C11)(C11) |
ミューテックスの型を定義する (enum) |
Call once | |
| (C11) |
関数を正確に1回呼び出す (関数) |
[編集] 条件変数
| ヘッダ
<threads.h>で定義 | |
cnd_t
|
条件変数識別子 |
| (C11) |
条件変数を作成する (関数) |
| (C11) |
条件変数でブロックされている1つのスレッドのブロックを解除する (関数) |
| (C11) |
条件変数でブロックされているすべてのスレッドのブロックを解除する (関数) |
| (C11) |
条件変数でブロックする (関数) |
| (C11) |
タイムアウト付きで条件変数でブロックする (関数) |
| (C11) |
条件変数を破棄する (関数) |
[編集] スレッドローカルストレージ
| ヘッダ
<threads.h>で定義 | |
| (C11)(C23で削除) |
記憶域クラス指定子_Thread_localの利便性のためのマクロ(キーワードマクロ) |
tss_t
|
スレッド固有ストレージポインタ |
| (C11) |
デストラクタが呼び出される最大回数 (マクロ定数) |
tss_dtor_t(C11) |
TSSデストラクタに使用される関数ポインタ型void(*)(void*) (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以降)外部リンケージを持つ識別子として使用するために予約されており、ここにリストされている他の識別子は<stdatomic.h>がインクルードされている場合に潜在的に(C23以降)予約されています。
そのような識別子を宣言、定義、または#undefすることは、それが標準または実装によって提供される場合(C23以降)未定義の動作を引き起こします。移植可能なプログラムはこれらの識別子を使用すべきではありません。
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 7.17 アトミックス <stdatomic.h> (p: TBD)
- 7.26 スレッド <threads.h> (p: TBD)
- 7.31.8 アトミックス <stdatomic.h> (p: TBD)
- 7.31.15 スレッド <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++ドキュメント 並行処理サポートライブラリ
|
[編集] 外部リンク
| GNU GCC Libc マニュアル: ISO C ミューテックス |