gpt4 book ai didi

c++ - 在类构造函数中初始化线程会导致崩溃吗?

转载 作者:太空狗 更新时间:2023-10-29 19:48:06 25 4
gpt4 key购买 nike

我无法确定奇怪的崩溃是从哪里来的,但它不是确定性发生的事实让我怀疑线程。

我有这样的东西:

class MyClass
{
MyClass() : mExit(false), mThread(&MyClass::ThreadMain,this)
{}

void ThreadMain()
{
unique_lock<mutex> lock(mMutex);
mCondition.wait(lock, [&] { return mExit; });
}

std::thread mThread;
std::mutex mMutex;
std::condition_variable mCondition;
bool mExit;
};

显然这是非常简单的,但我还不确定崩溃发生在哪里,所以我想问一下这个设置是否导致问题?例如,所有内容的初始化顺序是什么 - ThreadMain 是否有可能在类的实例完全构建之前运行?

它看起来像我在网上看到的一些例子,但我不确定它是否绝对安全。

最佳答案

我看到的唯一问题是类成员按照它们在类中声明的顺序进行初始化。由于 mThread 出现在所有其他类成员之前,因此线程可能在它们被初始化之前正在使用它们。

要解决此问题,您可以重新排列类(class)成员,但我不喜欢这种方法。如果其他人出现并更改顺序,则可能会破坏代码。您应该能够让线程获得默认初始化,然后在构造函数主体中启动线程,因为此时所有类成员都已初始化。

关于c++ - 在类构造函数中初始化线程会导致崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33571921/

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