【发布时间】:2021-04-07 15:23:58
【问题描述】:
我已经开始阅读 Anthony Williams 的“C++ Concurrency in action,第二版”。在其 2.2 部分中,他写道,线程函数的参数被复制到新线程上。我在几个编译器上检查了这一点,这是真的:如果我们传递一个左值 - 它会被复制到新线程上。
Anthony 写道,这可能表示未定义的行为 - 左值可能会超出原始范围的范围,而新线程会启动。
这有点吓人。这是否意味着每个 std::thread 构造函数调用都有潜在的竞争?为什么此复制在从 std::thread 构造函数返回之前不同步?为什么它没有完全复制到原始线程上?
【问题讨论】:
-
复制在“主”线程中完成,并且有同步。 (见en.cppreference.com/w/cpp/thread/thread/thread)
-
@Mat:你能有时间仔细看看吗?正如我检查过的(请参阅我的答案),隐式转换是在新创建的线程内完成的,这不是我通过阅读 cppreference 上的文本所期望的。阅读 cppreference 是否有一些误解? Anthony 似乎是对的,因为我的示例显示的结果与 Anthony 解释的结果相同。
标签: c++ multithreading c++11 stl std