我正在使用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
并因此没有影响时在它的创造。或者以这样的方式解决:不可能。
答案 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