【发布时间】:2013-03-29 18:13:42
【问题描述】:
我在玩std::thread,我想知道如何获得新std::thread() 的线程ID,我不是在谈论std::thread::id,而是给线程的操作系统ID(你可以使用pstree查看它)。
这只是为了我的知识,它只针对 Linux 平台(不需要是可移植的)。
我可以像这样在线程中获取 Linux 线程 ID:
#include <iostream>
#include <thread>
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
void SayHello()
{
std::cout << "Hello ! my id is " << (long int)syscall(SYS_gettid) << std::endl;
}
int main (int argc, char *argv[])
{
std::thread t1(&SayHello);
t1.join();
return 0;
}
但是如何在主循环中检索相同的 id 呢?我没有找到使用std::thread::native_handle 的方法。我相信有可能通过pid_t gettid(void); 得到它,因为 c++11 实现依赖于 pthreads,但我一定是错的。
有什么建议吗? 谢谢。
【问题讨论】:
-
std::thread::native_handle()有什么问题? -
@AndyProwl -
native_handle()和native_handle_type不需要存在,如果它们确实存在,那么您可以对结果对象执行的操作是实现定义的。 没有可移植语义。也许特定的实现支持这样做,但这是用户和库文档之间的问题。 -
@AndyProwl 它返回的值与
std::thread::id相同。 -
@PeteBecker:我明白这一点,但我假设 OP 可以做一些不可移植的事情(因为他专门针对一个平台),我希望实现能够提供这样的基本信息.我知道不需要提供,但如果不提供,我会觉得很奇怪。
标签: c++ multithreading c++11 pthreads