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

Determine if code is running in specific thread

本文关键字:线程 运行 代码 是否      更新时间:2023-10-16

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

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

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

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

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

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

谢谢!

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

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

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

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