c ++中“main”线程的id

时间:2012-11-08 11:14:50

标签: c++ multithreading c++11

c ++中是否有办法获取“主”程序线程的id?

我看到std::this_thread::get_id()获取当前正在执行的线程的id,但我需要main原始程序线程的id。我没有看到任何功能来实现这一点。

原因是我有一些非线程安全的内部函数,只能在应用程序的原始线程上调用,所以为了我想做的安全: -

assert(std::this_thread::get_id() == std::main_thread::get_id());

但当然没有这样做的功能,我也看不到任何获取这些信息的方法。

2 个答案:

答案 0 :(得分:11)

您可以在this_thread仍是原始主题时保存它:

std::thread::id main_thread_id;

int main() {
    main_thread_id = std::this_thread::get_id(); // gotcha!
    /* go on */
}

答案 1 :(得分:2)

这个主题似乎在这里讨论了很多次,就像在这个主题中一样:

你可以找到一些解决方案,但我只是反思...当启动新线程时,只需将主线程的id提供给它们,并将其存储在其他线程的字段中。如果这不会在整个线程的生命中发生变化,那么你很高兴,你可以通过这些句柄引用“主”线程。