我还没有能够确定哪里发生了一次奇怪的事故,但事实并非如此确定性地发生,这让我怀疑是否有穿线。初始化类构造函数中的线程是否会导致崩溃?
我有这样的事情:
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
?
它看起来像我在网上看到的一些例子,但我不能肯定地说它绝对安全与否。
我没有意识到'mutex'和'condition_variable' _needed_ initialising?或者你是否说我应该明确这样做,例如:MyClass():mExit(false),mMutex(),mCondition(),mThread(&MyClass :: ThreadMain,this)' –
@ Mr.Boy我永远不会使用未初始化的变量,所以是的,我会默认初始化它们在构造函数。 – NathanOliver
@NathanOliver在初始化列表中不包含_objects_将导致它们为_default initialized_。将它们包含在初始化程序列表中,将零参数传递给构造函数将导致对象被_value initialized_。 – Snps