C++でスレッドIDを取得する方法
C++でスレッドIDを取得する方法を紹介します。
1.問題点
C++11で実装されたstd::threadを使ったプログラムを作ってみました。
sample.cpp
#include <cstdlib>
#include <iostream>
#include <thread>
void task1(const std::string msg) {
std::cout << "task1:" << msg << std::endl;
}
void task2(const std::string msg) {
std::cout << "task2:" << msg << std::endl;
}
int main(int argc, char **argv) {
std::thread t1(task1, "Hello World!!");
std::thread t2(task2, "Hello World!!");
t1.join();
t2.join();
return 0;
}
このプログラムで、各スレッドのスレッドIDを調べたいのですが方法が分かりません。
ということで、C++でスレッドIDを取得する方法を紹介します。
2.スレッドIDを取得する
スレッドIDを取得するには、task1()およびtask2()にstd::this_thread::get_id()を追加します。
...(略)...
void task1(const std::string msg) {
std::cout << "task1:" << msg << std::endl;
std::cout << "task1 thread:" << std::this_thread::get_id() << std::endl;
}
void task2(const std::string msg) {
std::cout << "task2:" << msg << std::endl;
std::cout << "task2 thread:" << std::this_thread::get_id() << std::endl;
}
...(略)...
実行結果(実行結果はスレッド動作に依存します)
% ./a.out
task2:Hello World!!
task1:Hello World!!
task2 thread:140031416473344
task1 thread:140031424866048
main()で各スレッドのスレッドIDを取得したい場合は、次のようにします。
...(略)...
int main(int argc, char **argv) {
std::thread t1(task1, "Hello World!!");
std::thread t2(task2, "Hello World!!");
std::cout << "main thread:" << std::this_thread::get_id() << std::endl;
std::cout << "t1 thread:" << t1.get_id() << std::endl;
std::cout << "t2 thread:" << t2.get_id() << std::endl;
t1.join();
t2.join();
return 0;
}
実行結果(実行結果はスレッド動作に依存します)
% ./a.out
main thread:140046616794944
task2:Hello World!!
task1:Hello World!!
t1 thread:140046599993088
t2 thread:140046591600384
上の例では直接出力しましたが、スレッドIDを変数に代入する場合は次のように記述します。
自分のスレッドIDを変数に保持
std::thread::id this_id = std::this_thread::get_id();
スレッドオブジェクトのスレッドIDを変数に保持
std::thread t1;
std::thread::id this_id = t1::get_id();
3.参考サイト
参考サイトは下記です。ありがとうございました。
Posted by yujiro このページの先頭に戻る
トラックバックURL
コメントする
greeting