std :: thread检测主线程

时间:2012-07-13 11:14:43

标签: c++ multithreading

是否可以在c ++ 11中以任何可释放的方式检测当前线程是否是主线程?或者我是否必须使用std::this_thread::get_id()手动保存主线程线程ID,然后执行如下例程:

bool isMainThread()
{
    return theMainThreadIdISavedOnProgramStart == std::this_thread::get_id();
}

有没有一种常见的方法可以做到这一点?以上解决方案是否有效?

由于

1 个答案:

答案 0 :(得分:9)

主线是什么意思?如果你的意思是,执行main()的线程,那么你无法知道一个线程是否是一个主线程。您可以保存其ID,稍后您可以使用已保存的 ID来了解当前线程是否是主线程,方法是将其ID与保存的ID进行比较(如您所猜测的那样)在你的问题中)。

为了解释它,线程没有层次结构,没有父线程,没有子线程,即使一个线程创建其他线程。操作系统不记得哪个线程创建了哪些线程。因此,所有线程都与操作系统和程序相同。因此,您无法通过检测当前线程是否是应用程序中所有其他线程的父线程来推断main线程。