确定代码是否在特定线程中运行

时间:2015-07-22 16:38:14

标签: c++ multithreading c++11 concurrency stl

在我的应用程序中,我使用此代码段运行后台操作:

m_thread = std::thread(&MyClass::BackOp, this);

有时在我的应用程序中调用函数m_thread的不同线程(可能包括Close()本身)等待后台线程完成其操作:

if(m_thread.joinable()) m_thread.join();

这是不安全的行为,如果我是对的,可能会导致死锁

我可以在我的Close()函数文本中确定,如果它在我的后台线程中运行,则跳过"加入"?

谢谢!

3 个答案:

答案 0 :(得分:4)

  

我可以在我的Close()函数中确定它是否在我的后台线程中运行,跳过"加入"?

是的,您可以使用std::this_thread::get_id()函数并与m_thread.get_id()进行比较,以确定例程是否在同一个std::thread实例中运行。

答案 1 :(得分:1)

我相信你想使用std::this_thread::get_id并将其结果与std::thread::get_id(你的"背景"线程)的结果进行比较。或者有一些线程局部变量(可能在线程开始时存储这些变量等)。

答案 2 :(得分:-4)

您应该使用if(m_thread.joinable()) m_thread.join();。从未听说它不安全。