0

我想使用 PAPI 来获取std::thread 程序中所有 C++11 线程的总计数器。

Threads 上的 PAPI 文档说:

PAPI 库中的线程支持可以通过在 C 中调用以下低级函数来初始化:int PAPI_thread_init(unsigned long(*handle)(void));

手柄在哪里

指向以无符号长整数形式返回当前线程 ID 的例程的指针。

例如,对于 pthread,句柄是pthread_self. 但是,我不知道 C++11 应该是什么std::thread。使用与 PAPI 不同的东西也更有意义。

4

1 回答 1

0

C++11 线程支持具有std::this_thread::get_id()函数,该函数返回一个可以序列化为流的std::thread::id实例。然后你可以尝试unsigned long从流中读取一个并返回 ir。像这样的东西:

#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 可能并不总是一个数字,在这种情况下,您将无法从流中读取数字,您应该处理因此)。

话虽如此,也许只使用GetCurrentThreadId,因为您已经在介绍 Linux 特定的pthread_self.

于 2016-08-12T11:50:23.773 回答