std::线程在我分离它之前完成
std::thread finishes before I can detach it
如果我创建了一个在我能够调用detatch()
之前终止的 std::thread,预期的行为是什么?是否应该因为joinable
已经是假而引发异常?
如果是这样,那么有没有办法创建一个初始化为分离状态的线程,以便我可以避免此错误?
例:
void func()
{
// do something very trivial so that it finishes fast
int a = 1;
}
void main()
{
thread trivial(func);
trivial.detach();
}
我意识到在实践中生成一个线程来做琐碎的工作并不实用,但是我确实设法遇到了这种行为,我很想知道是否有办法解决它......
联接和分离具有相同的要求,它们必须是可联接的。所以我认为做可加入的检查应该就足够了。
If(trivial.joinable())
trivial.detach();
文档指出:
已完成代码执行但尚未联接的线程仍被视为活动执行线程,因此是可联接的。
所以我的猜测是分离的线程将立即不复存在。但它肯定是可以创建的。
注意:最好始终在联接或分离线程之前调用joinable()
。
线程
对象在其作用域完成时将被破坏。要确保该对象完成其作业,您需要调用 join 或分离。
相关文章:
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 检查分离的线程是否还活着?
- 为什么分离线程没有得到输出消息
- 如何"stop"正在等待条件变量的分离线程?
- 线程::加入与分离
- C++ 11 线程在分离后会自动销毁吗?
- 分离的线程:在繁忙时销毁互斥锁 错误C++
- 分离线程然后让它超出范围(并使其仍在运行)是否安全?
- 自终止线程.使用联接或分离
- 为什么 std::call_once 在联接和分离的线程中的行为不同?
- 重用分离的线程
- 为什么线程分离时程序挂起
- 无法永远分离线程 c++
- 访问全局或静态对象的分离线程
- 为什么std::async与简单的分离线程相比速度较慢
- 如何在 Windows C++ 上分离线程
- c++中分离线程的资源释放
- c++分离线程在其关联对象被删除后继续工作
- 分离线程执行结束
- c++ 11线程是否提供了一种在主线程退出后分离线程继续的方法?