在我的应用程序中,我使用此代码段运行后台操作:
m_thread = std::thread(&MyClass::BackOp, this);
有时在我的应用程序中调用函数m_thread
的不同线程(可能包括Close()
本身)等待后台线程完成其操作:
if(m_thread.joinable()) m_thread.join();
这是不安全的行为,如果我是对的,可能会导致死锁。
我可以在我的Close()
函数文本中确定,如果它在我的后台线程中运行,则跳过"加入"?
谢谢!
答案 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();
。从未听说它不安全。