确定代码是否在特定线程中运行
Determine if code is running in specific thread
在我的应用程序中,我使用以下代码段运行后台操作:
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();
。从没听说过不安全
相关文章:
- 为什么std::async使用同一个线程运行函数
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- 如何使线程运行现有类的函数?C++
- 使用 4 个和 8 个线程运行时执行的时间相等
- 在我调用join()之前,std ::线程运行
- winsock连接调用崩溃如果多个线程运行,则在一个线程中正常工作
- 如何确保这部分代码仅由一个线程运行(在 openmp 中)
- 线程连接在另一个线程运行时会导致分段错误
- 动态提升线程运行存储在具有共享指针的向量中的对象的方法
- 如何启动一个 boost::线程运行一个成员函数
- 如果由另一个 OpenMP 程序调用,则外部调用的 OpenMP 程序仅使用一个线程运行
- 线程运行时间最少
- 计算线程运行的次数
- MySQL C API:从不同线程运行查询时出现分段错误
- 使用两个线程运行和中断一个无限循环
- 与icc 14一起使用多线程运行时库时的错误
- 为什么我得到无限循环只有线程# 0后,所有5个线程运行多线程c++用餐哲学家谜语
- 发布配置上的Visual Studio c++多线程运行时问题
- 使用逻辑线程运行程序
- 为什么设置 CPU 关联会使线程运行速度变慢