知识卡片
启动线程前初始化依赖
内容
类的数据成员按声明顺序初始化,thread 成员构造后就可能开始执行。把它放在依赖成员之后声明,能保证构造结束前这些依赖已初始化;仍要避免线程逃逸后访问已析构对象或未同步共享状态。
参考来源
- 位置:《Effective Modern C++》第7章《并发API》,条款三十七(源文件:_epub-src/EPUB/text/ch008.xhtml)
- 结论依据:原文说明 thread 可在初始化后立即运行,并建议最后声明 thread,以保证其依赖成员先初始化。
- 原始内容:std::thread 对象可能会在初始化结束后就立即执行函数了,所以在最后声明是一个好习惯。这样就能保证一旦构造结束,在前面的所有数据成员都初始化完毕,可以供 std::thread 数据成员绑定的异步运行的线程安全使用。