std :: thread检测主线程

mok*_*oka 7 c++ multithreading

在c ++ 11中是否有任何可释放的方法来检测当前线程是否是主线程?或者我是否必须手动保存主线程的线程ID,std::this_thread::get_id()然后有一个这样的例程:

bool isMainThread()
{
    return theMainThreadIdISavedOnProgramStart == std::this_thread::get_id();
}
Run Code Online (Sandbox Code Playgroud)

有一个共同的方法来做到这一点?以上解决方案是否有效?

谢谢

Naw*_*waz 9

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

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

  • 非常正确的答案.由于阿里纳斯和根据不同的平台上运行FreeBSD,OpenBSD系统,Mac OS X或iOS的POSIX平台上,有pthreads.h中的功能 - INT pthread_main_np(无效); 如果线程是主线程,则返回非零值.如果你使用std :: thread生成了一个线程,这个底层函数将正常工作.注意函数末尾的"np"意味着"非便携",因此Nawaz仍然拥有最佳的平台无关答案. (3认同)