1. ホーム
  2. c++

[解決済み] c++11で整数のスレッドIDを取得する方法

2023-01-27 13:32:33

質問

c++11 には現在のスレッド ID を取得する可能性がありますが、整数型にキャストすることができません。

cout<<std::this_thread::get_id()<<endl;

出力 : 139918771783456

cout<<(uint64_t)std::this_thread::get_id()<<endl;

error: type 'std::thread::id' から type 'uint64_t' への無効なキャスト。 他の型でも同じです。 std::thread::id'型から'uint32_t'型への無効なキャストがあります。

整数のスレッド ID を取得するためにポインタキャストを行いたくありません。それを行うための何らかの合理的な方法 (移植可能であることを望むので標準) はありますか?

どのように解決するのですか?

ポータブルな解決策は、自分で生成したIDをスレッドに渡すことです。

int id = 0;
for(auto& work_item : all_work) {
    std::async(std::launch::async, [id,&work_item]{ work_item(id); });
    ++id;
}

std::thread::id 型は比較にのみ使われ、算術には使われません(つまり、缶に書いてあるように 識別子 ). で生成されるそのテキスト表現でさえも operator<< 不特定 であるため、数値の表現であることを当てにすることはできません。

のマップを使用することもできます。 std::thread::id の値を自分の ID にマップし、ID を直接渡す代わりに、このマップをスレッド間で (適切な同期をとって) 共有することもできます。