知识卡片

启动线程前初始化依赖

普通读书笔记卡 · 1444

内容

类的数据成员按声明顺序初始化,thread 成员构造后就可能开始执行。把它放在依赖成员之后声明,能保证构造结束前这些依赖已初始化;仍要避免线程逃逸后访问已析构对象或未同步共享状态。

参考来源

- 位置:《Effective Modern C++》第7章《并发API》,条款三十七(源文件:_epub-src/EPUB/text/ch008.xhtml) - 结论依据:原文说明 thread 可在初始化后立即运行,并建议最后声明 thread,以保证其依赖成员先初始化。 - 原始内容:std::thread 对象可能会在初始化结束后就立即执行函数了,所以在最后声明是一个好习惯。这样就能保证一旦构造结束,在前面的所有数据成员都初始化完毕,可以供 std::thread 数据成员绑定的异步运行的线程安全使用。