Linux:通过boost :: thread的句柄获取线程ID

时间:2014-08-06 07:24:12

标签: c++ linux pthreads boost-thread

我正在使用boost::thread(使用pthread进行下一步)但希望通过boost::thread指针获取线程id /(轻量级)pid。我设法通过使用成员native_handle()来执行此操作,但我找不到使用linux的替代方法。

boost::thread * boost_thread ptr = new boost::thread(/*...*/);
ptr->native_handle();

我发现了很多关于当前线程的帖子,使用类似pthread_self()之类的东西,但我不是想从这个帖子中获取线程ID,我想得到它来自外部,用于我刚刚使用new boost::thread创建的线程。有没有办法通过使用本机句柄或boost :: thread结构中的东西来检索线程id / pid?

非常感谢!

编辑:不重复导致其他线程无法解决此问题...至少在从pthread_t获取boost::thread并因此没有影响时在它的创造。或者以这样的方式解决:不可能。

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是直接从线程getpid()调用getpid()。 (请不要忘记,在Linux进程和线程中几乎相同,因此您需要进程ID)。

答案 1 :(得分:1)

大多数unixoids pid_t current_thread_id = gettid();将返回当前的线程ID,但glibc不提供此功能。相反,你必须打电话:

pid_t current_thread_id = (pid_t) syscall(__NR_gettid);

从该线程外部获取id将变得困难。使用pthread的本机句柄是一种不受支持的获取线程ID的方法。使用boost::thread::get_id()将返回一个对象,因此它不是轻量级的。

答案 2 :(得分:0)

在Linux上,我可以使用boost :: this_thread :: get_id()

获取线程ID
#include <iostream>
#include <boost/thread.hpp>


void func(){

  std::cout<<"Thrd Id "<<boost::this_thread::get_id()<<" "<<std::endl;
}


int main(){

  boost::thread thd1(&func);

  std::cout<<std::endl;
  boost::thread thd2(&func);

  while(1){}

  return 0;
}

输出:

Thrd Id 7f8ddcef8700
Thrd Id 7f8dd44f7700