0

std::thread PAPI を使用して、プログラム内のすべての C++11 スレッドの全体的なカウンターを取得したいと考えています。

Threads に関する PAPI ドキュメントには、次のように記載されています。

PAPI ライブラリのスレッド サポートは、C で次の低レベル関数を呼び出すことによって初期化できます。int PAPI_thread_init(unsigned long(*handle)(void));

ハンドルがあるところ

現在のスレッド ID を unsigned long として返すルーチンへのポインター。

たとえば、pthread の場合、ハンドルはpthread_selfです。しかし、 C++11 ではどうあるべきかわかりませんstd::thread。また、PAPI とは異なるものを使用する方が理にかなっている場合も同様です。

4

1 に答える 1

0

C++11 スレッド サポートには、ストリームにシリアル化できるstd::thread::idインスタンスを返すstd::this_thread::get_id()関数があります。次に、ストリームからを読み取って ir を返すことを試みることができます。このようなもの:unsigned long

#include <thread>
#include <iostream>
#include <sstream>

unsigned long current_thread_id()
{
    std::stringstream id_stream;
    id_stream << std::this_thread::get_id();
    unsigned long id;
    id_stream >> id;
    return id;
}

int main(int argc, char** argv)
{
    std::cout << current_thread_id();
    return 0;
}

したがって、このスニペットではcurrent_thread_id関数が探しているものですが、適切なエラー処理を追加する必要があります (スレッド ID は常に数値であるとは限りません。その場合、ストリームから数値を読み取ることができず、処理する必要がありますそれに応じて)。

そうは言っても、既に Linux 固有のpthread_self.

于 2016-08-12T11:50:23.773 に答える