gpt4 book ai didi

c++ - std::thread 线程在对象中分离出来,它什么时候终止?

转载 作者:太空狗 更新时间:2023-10-29 21:36:28 26 4
gpt4 key购买 nike

如果我在 Bar 的构造函数中分离出一个 std::thread 它什么时候停止运行? Bar 实例被破坏时是否保证停止?

class Bar {

public:

Bar() : thread(&Bar:foo, this) {
}

...

void foo() {
while (true) {//do stuff//}

}

private:
std::thread thread;

};

编辑:如何在析构函数中正确终止 std::thread

最佳答案

If I spin off an std::thread in the constructor of Bar when does it stop running?

只要执行您提供的可调用线程,该线程就会运行,否则程序将终止。

Is it guaranteed to stop when the Bar instance gets destructed?

没有。为了保证这一点,在 Bar 析构函数中调用 std::thread::join

实际上,如果您没有在 Bar::~Bar 之前调用 thread::jointhread::detach,那么您的应用程序将通过自动调用 std::terminate 来终止。所以你必须调用join(首选)或detach(不推荐)。

您还想在对象析构函数上调用 therad::join,因为生成的线程依赖对象的存活,如果对象在您的线程中被析构正在处理该对象 - 您正在使用已破坏的对象,并且您的代码中会有未定义的行为。

关于c++ - std::thread 线程在对象中分离出来,它什么时候终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com