std::thread构造函数完成实际上与执行线程的开始同步吗?

C++11 标准 (N337, 30.3.1.2) 说明了 std::thread 构造函数的同步:

同步:构造函数调用的完成与f的副本调用的开始同步。

阅读它,我认为构造函数在新线程开始之前完成。但是根据问题(std::thread 构造和执行)和 libc++/libstdc++ 中的当前实现,似乎没有同步机制,新的执行线程可能会在 std::thread 构造函数结束之前开始。

如果这是正确的,标准试图说什么?这是标准和实施之间的差距吗?还是我对“同步”一词的理解有误?即使构造函数和新线程同时运行,是否可以认为构造函数完成与新线程的开始同步?

回答

读起来,我以为构造函数在新线程开始之前就完成了

“同步于”是一个艺术术语。当标准要求两个操作相互同步时,这就带有了对两个操作前后评估的一定要求。例如,在std::thread构造函数之前访问原始线程中的变量,并在新线程中访问它不会导致数据竞争。

直观地,您可以将“与”同步为意味着新线程可以看到来自初始线程的所有先前的评估、修改和副作用。

无需确保线程在构造函数结束时开始。这不是这个意思。

标准库强制执行此要求的方式是依赖于本质上也强制执行此要求的pthread等底层库。


以上是std::thread构造函数完成实际上与执行线程的开始同步吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>