「std::thread」の版間の差分
提供: C++入門
(ページの作成:「std::thread とは、C++11でサポートされたC++のスレッド制御に関するクラスと関数です。 '''読み方''' ;std::thread:えすてぃ...」) |
|||
行55: | 行55: | ||
| スワップ | | スワップ | ||
|} | |} | ||
− | |||
== インストール == | == インストール == | ||
* [[C++11]]に対応した[[g++]]や[[clang++]]を使用してください。 | * [[C++11]]に対応した[[g++]]や[[clang++]]を使用してください。 | ||
行62: | 行61: | ||
#include <thread> | #include <thread> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | == シンプルなスレッドの例 == |
+ | より多くの例については、[[std::thread::thread]] などをご参照ください。 | ||
=== ソースコード std_thread1.cpp === | === ソースコード std_thread1.cpp === | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
行111: | 行111: | ||
Exit 1 | Exit 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | == 共有データの保護 mutex == | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |+ mutex | ||
+ | ! mutexの種類 | ||
+ | ! 説明 | ||
+ | |- | ||
+ | | [[std::mutex]] | ||
+ | | 非再帰的mutex | ||
+ | |- | ||
+ | | [[std::recursive_mutex]] | ||
+ | | 再帰的mutext | ||
+ | |- | ||
+ | | [[std::timed_mutex]] | ||
+ | | ロック関数でタイムアウトが可能な非再帰的mutex | ||
+ | |- | ||
+ | | [[std::recursive_timed_mutex]] | ||
+ | | ロック関数でタイムアウトが可能な再帰的mutex | ||
+ | |} | ||
+ | |||
+ | ロッククラステンプレート | ||
+ | * [[std::unique_lock]]<> | ||
+ | * [[std::lock_guard]]<> | ||
+ | |||
== 関連項目 == | == 関連項目 == | ||
* [[boost::thread]] | * [[boost::thread]] | ||
+ | |||
+ | {{thread}} | ||
+ | {{mutex}} | ||
<!-- vim: filetype=mediawiki --> | <!-- vim: filetype=mediawiki --> |
2013年12月29日 (日) 16:52時点における版
std::thread とは、C++11でサポートされたC++のスレッド制御に関するクラスと関数です。
読み方
- std::thread
- えすてぃーでぃー すれっど
目次
概要
メンバ関数 | 説明 |
---|---|
std::thread::thread | コンストラクタ。threadオブジェクトを作成します。 |
std::thread::~thread | スレッドがjoinかdetachされている必要があります。スレッドオブジェクトを破棄します。 |
std::thread::operator= | スレッドオブジェクトをmoveします。 |
オブザーバー | |
std::thread::joinable | スレッドが合流可能であるかチェックします。 |
std::thread::get_id | スレッドのIDを返します。 |
std::thread::native_handle | スレッドハンドルを返します。 |
std::thread::hardware_concurrency | 実装によってサポートされる同時スレッド数を返します。 |
操作 | |
std::thread::join | スレッドの終了を待ちます。 |
std::thread::detach | スレッドハンドルから独立して実行するスレッドを許可します。 |
std::thread::swap | スワップ |
非メンバ関数 | |
std::swap | スワップ |
インストール
ヘッダファイル
#include <thread>
シンプルなスレッドの例
より多くの例については、std::thread::thread などをご参照ください。
ソースコード std_thread1.cpp
#include <iostream> #include <thread> #include <exception> using namespace std; void do_worker1 () { std::cout << __PRETTY_FUNCTION__ << std::endl; } int main (int argc, char *argv[]) { try { std::thread t1(do_worker1); t1.join(); } catch (std::exception &ex) { std::cerr << ex.what() << std::endl; } return (0); }
コンパイル
g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \ -Wl,-rpath=/usr/local/lib/gcc49 -pthread std_thread1.cpp -o std_thread1
実行例
% ./std_thread1 void do_worker1()
注意
joinをし忘れると、以下のエラーがでます。
% ./std_thread1 terminate called without an active exception Abort Exit 134
-WLで-rpathを指定しないと下記のエラーが出ます。
% ./std_thread1 /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.11 required by /tmp/std_thread1 not found Exit 1
共有データの保護 mutex
mutexの種類 | 説明 |
---|---|
std::mutex | 非再帰的mutex |
std::recursive_mutex | 再帰的mutext |
std::timed_mutex | ロック関数でタイムアウトが可能な非再帰的mutex |
std::recursive_timed_mutex | ロック関数でタイムアウトが可能な再帰的mutex |
ロッククラステンプレート
関連項目
- std::thread
- boost::thread
関数 | 説明 |
---|---|
メンバ関数 | |
std::thread::thread | コンストラクタ。threadオブジェクトを作成します。 |
std::thread::~thread | スレッドがjoinかdetachされている必要があります。スレッドオブジェクトを破棄します。 |
std::thread::operator= | スレッドオブジェクトをmoveします。 |
オブザーバー | |
std::thread::joinable | スレッドが合流可能であるかチェックします。 |
std::thread::get_id | スレッドのIDを返します。 |
std::thread::native_handle | スレッドハンドルを返します。 |
std::thread::hardware_concurrency | 実装によってサポートされる同時スレッド数を返します。 |
操作 | |
std::thread::join | スレッドの終了を待ちます。 |
std::thread::detach | スレッドハンドルから独立して実行するスレッドを許可します。 |
std::thread::swap | スワップ |
非メンバ関数 | |
std::swap | スワップ |
カレントスレッドの管理 | |
std::this_thread::yield_id | 処理系に再スケジュールの機会を与えます。 |
std::this_thread::get_id | スレッドIDを返します。 |
std::this_thread::sleep_for | 指定した時間、現在のスレッドの実行を停止します。 |
std::this_thread::sleep_until | 指定した時刻まで、現在のスレッドの実行を停止します。 |
mutexの種類 | 説明 |
---|---|
std::mutex | 非再帰的mutex |
std::recursive_mutex | 再帰的mutext |
std::timed_mutex | ロック関数でタイムアウトが可能な非再帰的mutex |
std::recursive_timed_mutex | ロック関数でタイムアウトが可能な再帰的mutex |
ロッククラステンプレート