根据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; }
请注意,keep_going在线程对象之前声明,并且应该在线程进入go函数时设置为true.这很好,似乎工作正常.
但是,这是多线程代码,并且偏执是值得的,所以我有两个问题:
1依赖这样的初始化顺序是否安全?没有处理线程,我的真实对象没有意义,所以我想在构造函数中设置它.