【C++多线程】转移线程所有权

C++标准库中有很多资源占有(resource-owning)类型,比如 std::ifstream , std::unique_ptr 还有 std::thread 都是可移动(movable),但不可拷贝(cpoyable)。虽然, std::thread 实例不会如 std::unique_ptr 去占有一个动态对象所有权,但是它会占用一部分资源的所有权:每个实例都管理一个执行线程。 std::thread 所有权可以在多个实例中互相转移。在同一时间点,就能保证只关联一个执行线程;同时,也允许程序员能在不同的对象之间转移所有权。

1 #include <iostream>
 2 #include <thread>
 3 
 4 using namespace std;
 5 
 6 
 7 void test()
 8 {
 9     cout << "子线程开始" << endl;
10     cout << "子线程结束" << endl;
11     return;
12 }
13 
14 
15 int main()
16 {
17     cout << "主线程开始" << endl;
18     thread t1(test);            //创建t1
19     thread t2 = move(t1);       //将t1的所有权转给t2
20     t1 = thread(test);          //临时对象thread(test)的移动操作会隐式自动执行
21     thread t3;                  //创建线程对象t3但是并未关联线程函数
22     t3 = move(t2);              //将t12的所有权转给t3
23     t1 = move(t3);              //操作会失败,因为t1已经有了关联线程
24     cout << "主线程结束!" << endl;
25     return 0;
26 }

线程的所有权可以在函数外进行转移。

【C++多线程】转移线程所有权

所有权可以在函数内部传递,允许 std::thread 实例可作为参数进行传递。

【C++多线程】转移线程所有权

参考

《C++并发编程实战》
原文链接: https://www.cnblogs.com/chen-cs/p/13056715.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/198494

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:52
下一篇 2023年2月12日 下午7:53

相关推荐