您的位置:首页 > 编程语言 > C语言/C++

c++转移线程所有权

2017-10-17 22:35 169 查看
c++中有很多资源占有类型,比如std::ifstream,std::unique_ptr,std::thread 都是可以移动不可拷贝的。

可以通过std::move()转移一个线程所有权给一个未关联线程的thread对象,但是不能通过赋一个新值的方式丢弃一个线程。

void haha(){}
void heihei(){}

int main()
{
thread t1(haha); // 1
thread t2 = move(t1); // 2
t1 = thread(heihei); // 3
thread t3; // 4
t3 = move(t2); // 5
t1 = move(t3); // 6 崩溃

return 0;
}1. 创建对象  t1  关联haha
2. 创建对象  t2  并接管 t1,此时 t1 未关联任何线程,所以它可以接管一个线程

3. t1 接管heihei

4. 创建对象  t3  , 不关联线程

5. t2  转移控制权给  t3  ,此时 t2 未关联任何线程,可接管一个线程

6. t1 已经关联了线程heihei,此时接管 t3 不被允许,将导致程序崩溃

可以通过std::move()转移一个线程所有权给一个未关联线程的thread对象,但是不能通过赋一个新值的方式丢弃一个线程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 线程 并发 thread