根据C++ 14标准,非静态成员变量按照它们在类中声明的顺序进行初始化.下面的减少代码依赖于此规则来控制线程函数.
class foo
{
foo():
keep_going{true},
my_thread(&foo::go,this)
{}
void go()
{
while(keep_going)
check a std::condition_variable and do some work;
}
bool keep_going;
std::thread my_thread;
}
Run Code Online (Sandbox Code Playgroud)
注意,它keep_going
是在线程对象之前声明的,应该true
在线程进入go函数时设置为.这很好,似乎工作正常.
但是,这是多线程代码,并且偏执是值得的,所以我有两个问题:
1依赖这样的初始化顺序是否安全?没有处理线程,我的真实对象没有意义,所以我想在构造函数中设置它.
2当代码依赖于初始化顺序等相对模糊的东西时,给别人提供代码是不安全的吗?
归档时间: |
|
查看次数: |
139 次 |
最近记录: |