トップページへ

C++でスレッドIDを取得する方法

小粋空間 » Programming Language » C/C++ » 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.参考サイト

参考サイトは下記です。ありがとうございました。

« 前の記事へ

次の記事へ »

トップページへ