【发布时间】:2017-08-22 19:11:07
【问题描述】:
安东尼·威廉姆斯书中的台词:
以下示例显示了使用 std::move 转移所有权 将动态对象转换为线程:
void process_big_object(std::unique_ptr<big_object>); std::unique_ptr<big_object> p(new big_object); p->prepare_data(42); std::thread t(process_big_object,std::move(p));通过在
std::thread构造函数中指定std::move(p),big_object的所有权首先转移到 internal 新创建线程的存储,然后进入process_big_object.
我了解堆栈和堆;任何想法,这个 internal storage 到底是什么?
他们为什么不能将所有权直接转让给process_big_object?
【问题讨论】:
-
每个线程都有自己的堆栈。线程对象需要首先请求创建自己的堆栈和其他操作系统资源,然后才能以自己的堆栈为基础调用您的函数。所以它需要在分派给你的函数之前将数据存储在某个地方。
-
谢谢,@PeterT。这回答了我问题的最后一部分。
标签: c++ multithreading c++11 move