Namespaces
Variants

Concurrency support library

From cppreference.net
< c

C++は、スレッド、アトミック操作、相互排他、条件変数、およびスレッド固有ストレージの組み込みサポートを含みます。

これらの機能はオプションで提供されます:

  • コンパイラによってマクロ定数 __STDC_NO_THREADS__ が定義されている場合、ヘッダ <threads.h> およびそこで提供されるすべての名前は提供されない。
  • コンパイラによってマクロ定数 __STDC_NO_ATOMICS__ が定義されている場合、ヘッダ <stdatomic.h> およびそこで提供されるすべての名前は提供されない。

関連項目 _Atomic 型指定子と型修飾子

目次

スレッド

定義済みヘッダ <threads.h>
thrd_t スレッドを識別する実装定義の完全オブジェクト型
スレッドを作成する
(関数)
2つの識別子が同じスレッドを参照するかどうかをチェックする
(関数)
現在のスレッド識別子を取得する
(関数)
呼び出しスレッドの実行を指定期間一時停止する
(関数)
現在のタイムスライスを明け渡す
(関数)
呼び出しスレッドを終了する
(関数)
スレッドをデタッチする
(関数)
スレッドが終了するまでブロックする
(関数)
スレッドエラーステータスを示す
(定数)
thrd_start_t
(C11)
関数ポインタ型のtypedef int ( * ) ( void * ) , thrd_create で使用される
(typedef)

アトミック操作

ヘッダーで定義 <stdatomic.h>
アトミック型に対する操作
指定されたアトミック型がロックフリーであることを示す
(マクロ定数)
アトミックオブジェクトがロックフリーかどうかを示す
(関数)
アトミックオブジェクトに値を格納する
(関数)
アトミックオブジェクトから値を読み取る
(関数)
アトミックオブジェクトの値と値を交換する
(関数)
期待される値と一致する場合に値をアトミックオブジェクトと交換し、それ以外の場合には古い値を読み取る
(関数)
アトミック加算
(関数)
アトミック減算
(関数)
アトミックビット単位OR
(関数)
アトミックビット単位排他的論理和
(関数)
アトミックビット単位AND
(関数)
フラグ型と操作
ロックフリーなアトミックブーリアンフラグ
(構造体)
アトミックフラグをtrueに設定し、以前の値を返す
(関数)
アトミックフラグをfalseに設定する
(関数)
初期化
既存のアトミックオブジェクトを初期化する
(関数)
(C11) (C17で非推奨) (C23で削除)
新しいアトミックオブジェクトを初期化する
(関数マクロ)
新しい atomic_flag を初期化する
(マクロ定数)
メモリ同期順序
メモリ順序制約を定義する
(列挙型)
memory_order_consume の依存チェーンを解除します
(関数マクロ)
メモリ順序依存の汎用フェンス同期プリミティブ
(関数)
同じスレッド内で実行されるスレッドとシグナルハンドラ間のフェンス
(関数)
HTMLタグ、属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。 **日本語訳:** **説明:** - `atomic_schar`、`_Atomic`、`signed char` はC++専門用語のため翻訳せず保持 - HTMLタグ、属性、` `タグ内のテキストはすべて保持 - `(C11)` はC言語仕様のバージョン表記のため保持 - 元の書式と構造を完全に維持 **翻訳結果:** **説明:** - HTMLタグ、属性、および` `タグ内のテキストは翻訳していません - C++固有の用語(atomic_uchar、_Atomic、unsigned、char)は翻訳していません - フォーマットは完全に保持されています - プロフェッショナルで正確な翻訳を維持しています **日本語訳:** **説明:** - `atomic_int` と `_Atomic int` はC++/Cの専門用語のため翻訳せず保持 - HTMLタグ、属性、コードブロックは完全に保持 - C11はC言語のバージョン表記のため保持 - フォーマットと構造は完全に維持 **日本語訳:** **説明:** - HTMLタグ、属性、` `タグ内のテキストは翻訳していません - C++の専門用語(atomic_uint、_Atomic、unsigned、int)はそのまま保持しています - 元のフォーマットと構造を完全に維持しています **翻訳結果:** **説明:** - HTMLタグ、属性、および` `タグ内のテキストは翻訳せず保持しました - C++固有の用語(`atomic_long`, `_Atomic`, `long`)は翻訳しませんでした - 書式設定と構造は完全に保持されています - 翻訳対象の自然言語テキストが存在しないため、元のHTMLがそのまま出力されています **翻訳結果:** **説明:** - ` `タグ内の`atomic_ulong`はC++の型名なので翻訳せず保持 - ` `内の`(C11)`はバージョン情報なので翻訳せず保持 - ` `内の`_Atomic`、`unsigned`、`long`はC++のキーワードなので翻訳せず保持 - HTMLタグ、属性、クラス名はすべてそのまま保持 - フォーマットと構造は完全に維持 **翻訳結果:** **説明:** - ` `タグ内の`atomic_ullong`はC++の型名なので翻訳せず保持 - ` `内の`(C11)`はC言語のバージョン指定なので翻訳せず保持 - ` `内のC言語コードはすべて翻訳せず保持 - HTMLタグ、属性、クラス名はすべて変更せず保持 **翻訳結果:** **説明:** - ` `タグ内の`atomic_char16_t`と` `内の`_Atomic char16_t`はC++固有の用語のため翻訳対象外 - HTMLタグ、属性、クラス名は全て保持 - `(C11)`はバージョン情報のため翻訳せず保持 - 元のフォーマットと構造を完全に維持 **翻訳結果:** **説明:** - HTMLタグ、属性はすべて保持 - ` `タグ内の`atomic_wchar_t`はC++用語のため非翻訳 - `
`、``タグは存在しないため対象外
- ``内の`_Atomic`と`wchar_t`はC++用語のため非翻訳
- テキスト部分は翻訳対象外(C++用語とバージョン表記のみを含むため)
**日本語訳:** **説明:** - HTMLタグ、属性、コードブロック内のテキストは翻訳せずに保持 - C++固有の用語(atomic_int_least8_t, _Atomic, int_least8_t)は翻訳せず - フォーマットと構造は完全に維持 - プロフェッショナルで正確な翻訳を実現 **翻訳結果:** **説明:** - ` `タグ内の`atomic_uint_least8_t`はC++の型名なので翻訳せず保持 - ` `内の`uint_least8_t`もC++の型名なので保持 - `_Atomic`はC言語のキーワードなので保持 - HTMLタグ、属性、クラス名はすべて保持 - フォーマットと構造は完全に維持 **日本語訳:** **説明:** - ` ` タグ内の `atomic_int_least16_t` はC++の型名のため翻訳対象外 - ` ` 内の `int_least16_t` はC++の型名のため翻訳対象外 - `_Atomic` はC言語のキーワードのため翻訳対象外 - `(C11)` はC言語規格バージョンを示すため翻訳対象外 - HTMLタグ、属性、構造は完全に保持 **翻訳結果:** **注記:** - HTMLタグ、属性、 タグ内のテキスト、C++固有の用語は翻訳していません - 元のフォーマットを保持しています - このテーブル行はC11標準で導入された`atomic_uint_least16_t`型の定義を表しています **翻訳結果:** **説明:** - ` `タグ内の`atomic_int_least32_t`はC++の型名のため翻訳対象外 - ` `内の`(C11)`はC言語規格のバージョン表記のため翻訳対象外 - ` `内の`_Atomic`と`int_least32_t`はC言語のキーワードと型名のため翻訳対象外 - HTMLタグ、属性、構造は完全に保持 - 翻訳が必要なテキストが存在しないため、元のHTMLがそのまま出力されています **翻訳結果:** **説明:** - ` `タグ内の`atomic_uint_least32_t`はC++固有の用語のため翻訳せず - ` `内の`(C11)`はバージョン情報のため翻訳せず - ` `内の`_Atomic`と`uint_least32_t`はC++固有の用語のため翻訳せず - HTMLタグ、属性、構造は完全に保持 - フォーマットと空白文字も正確に維持 **翻訳結果:** **説明:** - ` `タグ内の`atomic_int_least64_t`はC++の型名のため翻訳対象外 - ` `内の`(C11)`はC言語規格のバージョン表記のため翻訳対象外 - ` `内の`_Atomic`と`int_least64_t`はC言語のキーワードと型名のため翻訳対象外 - HTMLタグ、属性、構造は完全に保持されています **翻訳結果:** **説明:** - ` `タグ内の`atomic_uint_least64_t`はC++の型名のため翻訳対象外 - ` `内の`uint_least64_t`はC++の型名のため翻訳対象外 - `_Atomic`はC11のキーワードのため翻訳対象外 - HTMLタグ、属性、構造は完全に保持 - コメントや追加の説明文がないため、元のHTML構造のみを出力 **翻訳結果:** **説明:** - HTMLタグ、属性、 タグ内のテキストは翻訳せず保持 - C++固有の用語(atomic_int_fast8_t, _Atomic, int_fast8_t)は翻訳せず保持 - フォーマットと構造は完全に維持 - 翻訳対象のテキストがないため、元のHTMLがそのまま出力されています **翻訳結果:** **説明:** - ` `タグ内の`atomic_uint_fast8_t`はC++の型名のため翻訳対象外 - ` `内の`uint_fast8_t`はC++の型名のため翻訳対象外 - `_Atomic`はC11のキーワードのため翻訳対象外 - HTMLタグ、属性、クラス名は全て保持 - `(C11)`は規格バージョンを示すため翻訳対象外 このHTMLフラグメントはC++のアトミック型に関するドキュメントの一部であり、技術的な正確性を保つためにC++固有の用語はすべて原文のまま保持されています。 **翻訳結果:** **説明:** - HTMLタグ、属性、 タグ内のテキストは翻訳せず保持 - C++固有の用語(atomic_int_fast16_t, _Atomic, int_fast16_t)は翻訳せず保持 - 書式設定は完全に維持 - 翻訳が必要なテキストが存在しないため、元のHTMLをそのまま出力 **翻訳結果:** **説明:** - ` `タグ内の`atomic_uint_fast16_t`はC++の型名のため翻訳せず - ` `内の`(C11)`はC言語規格のバージョン表記のため翻訳せず - ` `内の`_Atomic`と`uint_fast16_t`はC言語のキーワードと型名のため翻訳せず - HTMLタグと属性はすべてそのまま保持 - フォーマットと構造は完全に維持 **翻訳結果:** **注記:** - HTMLタグ、属性、 タグ内のテキストは翻訳していません - C++固有の用語(atomic_int_fast32_t, _Atomic, int_fast32_t)は翻訳していません - フォーマットは完全に保持されています - (C11)はC言語仕様のバージョンを示すため翻訳していません **翻訳結果:** **説明:** - ` `タグ内の`atomic_uint_fast32_t`はC++固有の用語のため翻訳対象外 - ` `内の`uint_fast32_t`もC++固有の型名のため翻訳対象外 - HTMLタグ、属性、C++コードはすべて原文のまま保持 - このテーブル行はC11標準で導入されたアトミック型の定義を表示するもの **日本語訳:** **説明:** - HTMLタグ、属性、コードブロック内のテキストは翻訳せずに保持 - C++固有の用語(atomic_int_fast64_t, _Atomic, int_fast64_t)は翻訳せず - 元のフォーマットと構造を完全に維持 **日本語訳:** **説明:** - HTMLタグ、属性、コード内のテキストは翻訳せず、元のフォーマットを保持しています - C++固有の用語(atomic_uint_fast64_t, _Atomic, uint_fast64_t)は翻訳していません - コードブロック内のテキストはそのまま維持しています **日本語訳:** **説明:** - HTMLタグ、属性、` `タグ内のテキスト、C++固有の用語(`atomic_intptr_t`、`_Atomic`、`intptr_t`)は翻訳していません - 書式と構造は完全に保持されています - C11というバージョン表記もそのまま保持しています **日本語訳:** **説明:** - HTMLタグ、属性、コード内のテキストは翻訳せず、元のフォーマットを保持 - C++専門用語(atomic_uintptr_t, _Atomic, uintptr_t)は翻訳せず - C11はC言語規格のバージョンを示すため、そのまま保持 **翻訳結果:** **説明:** - HTMLタグ、属性はすべて保持 - ` `、`
`、``タグ内のテキストは翻訳せず保持
- C++固有の用語(`atomic_size_t`、`_Atomic`、`size_t`)は翻訳せず保持
- フォーマットは完全に維持
**日本語訳:** **説明:** - C++専門用語(`atomic_ptrdiff_t`, `_Atomic`, `ptrdiff_t`)は翻訳対象外 - HTMLタグ、属性、コードブロックは完全に保持 - 書式と構造は元のまま維持 - C11はバージョン表記のため翻訳せず **日本語訳:** **説明:** - `atomic_intmax_t`、`_Atomic`、`intmax_t` はC++の専門用語のため翻訳せず保持 - HTMLタグ、属性、` `タグ内のテキストは完全に保持 - `(C11)` はC言語規格のバージョンを示すため保持 - 元のフォーマットと構造を完全に維持 **日本語訳:** **説明:** - `atomic_uintmax_t` と `uintmax_t` はC++固有の用語のため翻訳せず保持 - `_Atomic` はC言語のキーワードのため翻訳せず保持 - HTMLタグ、属性、コードブロックは完全に保持 - 構造とフォーマットは元のまま維持
便利な型エイリアス
型定義名 完全な型名
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 ミューテックス識別子
ミューテックスを作成する
(関数)
ミューテックスをロックするまでブロックする
(関数)
ミューテックスをロックするかタイムアウトするまでブロックする
(関数)
ミューテックスをロックするか、既にロックされている場合はブロックせずに返る
(関数)
ミューテックスをアンロックする
(関数)
ミューテックスを破棄する
(関数)
ミューテックスの型を定義する
(列挙型)
一度だけの呼び出し
関数を正確に一度だけ呼び出す
(関数)

条件変数

ヘッダーで定義 <threads.h>
cnd_t 条件変数識別子
条件変数を作成する
(関数)
条件変数でブロックされている1つのスレッドのブロックを解除する
(関数)
条件変数でブロックされているすべてのスレッドのブロックを解除する
(関数)
条件変数でブロックする
(関数)
条件変数でブロックする(タイムアウト付き)
(関数)
条件変数を破棄する
(関数)

スレッドローカルストレージ

ヘッダーで定義 <threads.h>
(C11) (C23で削除)
ストレージクラス指定子 _Thread_local の便利マクロ
(キーワードマクロ)
tss_t スレッド固有ストレージポインタ
デストラクタが呼び出される最大回数
(マクロ定数)
tss_dtor_t
(C11)
関数ポインタ型 void ( * ) ( void * ) , TSSデストラクタに使用
(typedef)
指定されたデストラクタでスレッド固有ストレージポインタを作成
(関数)
(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
翻訳結果: - HTMLタグ、属性、
タグ内のテキストは翻訳せず保持
- C++固有の用語("C++ documentation"、"Concurrency support library")は翻訳せず保持
- その他のテキストのみを日本語に翻訳

外部リンク

GNU GCC Libc マニュアル: ISO C Mutexes