スレッドサポートライブラリ
C++にはスレッド、相互排他、条件変数、フューチャーに対する組み込みのサポートがあります。
目次 |
[編集] スレッド
スレッドによりプログラムを複数のCPUコアで実行することができます。
ヘッダ
<thread> で定義 | |
(C++11) |
別のスレッドを管理します (クラス) |
(C++20) |
自動合流とキャンセルをサポートする std::thread (クラス) |
現在のスレッドを管理する関数 | |
名前空間
this_thread で定義 | |
(C++11) |
処理系にスレッドの切り替えを提案します (関数) |
(C++11) |
現在のスレッドのスレッド id を返します (関数) |
(C++11) |
指定された時間、現在のスレッドの実行を停止します (関数) |
(C++11) |
指定された時刻まで現在のスレッドの実行を停止します (関数) |
スレッドのキャンセル
|
(C++20以上) |
[編集] キャッシュサイズへのアクセス
ヘッダ
<new> で定義 | |
false sharing を回���するための最小オフセット true sharing を促進するための最大オフセット (定数) |
[編集] 相互排他
相互排他アルゴリズムにより複数のスレッドが共有リソースに同時にアクセスすることを防ぐことができます。 これによりデータ競合を避け、スレッド間の同期を実現できます。
ヘッダ
<mutex> で定義 | |
(C++11) |
基本的な相互排他機能を提供します (クラス) |
(C++11) |
タイムアウト付きのロックを実装する相互排他機能を提供します (クラス) |
(C++11) |
同じスレッドによる再帰的なロックが可能な相互排他機能を提供します (クラス) |
(C++11) |
同じスレッドによる再帰的なロックが可能なタイムアウト付きのロックを実装する相互排他機能を提供します (クラス) |
ヘッダ
<shared_mutex> で定義 | |
(C++17) |
共有可能な相互排他機能を提供します (クラス) |
(C++14) |
タイムアウト付きのロックを実装する共有可能な相互排他機能を提供します (クラス) |
汎用ミューテックス管理 | |
ヘッダ
<mutex> で定義 | |
(C++11) |
厳密なスコープベースのミューテックス所有権のラッパーを実装します (クラステンプレート) |
(C++17) |
複数のミューテックスに対するデッドロック回避機能付きの RAII ラッパー (クラステンプレート) |
(C++11) |
ムーブ可能なミューテックスの所有権のラッパーを実装します (クラステンプレート) |
(C++14) |
ムーブ可能なミューテックスの共有所有権のラッパーを実装します (クラステンプレート) |
(C++11)(C++11)(C++11) |
ロック戦略を指定するために使われるタグ型 (クラス) |
(C++11)(C++11)(C++11) |
ロック戦略を指定するために使われるタグ定数 (定数) |
汎用ロックアルゴリズム | |
(C++11) |
try_lock を繰り返し呼び出して複数のミューテックスの所有権の取得を試みます (関数テンプレート) |
(C++11) |
指定された複数のミューテックスをロックします。 いずれかが利用可能でなければブロックします (関数テンプレート) |
コールワンス | |
(C++11) |
call_once が一度だけ関数を呼び出すことを保証するためのヘルパーオブジェクト (クラス) |
(C++11) |
複数のスレッドから呼ばれた場合でも一度だけ関数を呼びます (関数テンプレート) |
[編集] 条件変数
条件変数は複数のスレッド間のコミュニケーションを可能とする同期プリミティブです。 いくつかのスレッドが別のスレッドからの「実行を再開しても良い」という通知を (必要に応じてタイムアウト付きで) 待機することを可能とします。 条件変数は必ずミューテックスと紐付けられます。
ヘッダ
<condition_variable> で定義 | |
(C++11) |
std::unique_lock と紐付いた条件変数を提供します (クラス) |
(C++11) |
任意のロック型と紐付いた条件変数を提供します (クラス) |
(C++11) |
現在のスレッドが完全に終了したときに notify_all が呼ばれるようにスケジュールします (関数) |
(C++11) |
条件変数をタイムアウト付きで待機したときのありうる結果を列挙します (列挙) |
セマフォセマフォは共有リソースへの並行アクセスを制約するために使用される軽量な同期プリミティブです。 どちらも使用できるときは、条件変数よりもセマフォの方が効率的になり得ます。
ラッチとバリアラッチおよびバリアは期待した数のスレッドが到着するまで任意個のスレッドをブロックするスレッド協調メカニズムです。 ラッチは再利用できませんが、バリアは繰り返し使用できます。
|
(C++20以上) |
[編集] フューチャー
標準ライブラリは非同期タスク (異なるスレッドで起動された関数) から返された値を取得したり投げられた例外をキャッチしたりするための機能を提供しています。 これらの値は共有状態を介してやり取りされます。 これは、非同期タスクが戻り値や例外を格納したり、 std::future や std::shared_future のインスタンスを保持する他のスレッドが値を調べたり、待機したり、その他の操作をするための場所です。
ヘッダ
<future> で定義 | |
(C++11) |
非同期な取得のために値を格納します (クラステンプレート) |
(C++11) |
関数をパッケージ化して、その戻り値を非同期な取得のために格納します (クラステンプレート) |
(C++11) |
非同期に設定される値を待ちます (クラステンプレート) |
(C++11) |
(他のフューチャーからも参照される可能性がある) 非同期に設定される値を待ちます (クラステンプレート) |
(C++11) |
(場合によっては新しいスレッドで) 非同期に関数を実行し、その結果を保持する std::future を返します (関数テンプレート) |
(C++11) |
std::async に対する起動ポリシーを指定します (列挙) |
(C++11) |
std::future および std::shared_future で行うタイムアウト付き待機の結果を指定します (列挙) |
フューチャーのエラー | |
(C++11) |
フューチャーまたはプロミスに関するエラーを報告します (クラス) |
(C++11) |
フューチャーのエラーカテゴリを識別します (関数) |
(C++11) |
フューチャーのエラーコードを識別します (列挙) |
[編集] 関連項目
スレッドサポートライブラリ の C言語リファレンス
|