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对象,但是不能通过赋一个新值的方式丢弃一个线程。
可以通过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++中的vector系列--vector<unique_ptr<>>初始化(所有权转移)
- 实战c++中的vector系列--vector<unique_ptr<>>初始化(所有权转移)
- 转移线程的所有权
- Thread函数的参数传递和线程所有权转移(2.2)--std::move()
- c++中的线程
- C++多线程——三种线程实现方式的区别与实际应用建议
- 用C++模板封装线程
- 西文图书管理系统(C++、线程、网络socket、MYSQL)
- C++中高并发使用线程不安全类库的一种方法
- c/c++线程--2线程同步
- c++ 11 多线线程系列-----------生产者消费者
- C++ 11 线程的同步与互斥
- c++ 线程
- ICE笔记(08):C++线程与并发
- UNIX上C++程序设计守则(信号和线程)(上)
- 线程安全单例模式(C++)
- c++ 多线程编程之创建新线程
- [C/C++]_[初级]_[ 线程pthread学习之互斥锁和条件变量的应用 ]
- 双线程(计时及输入)(C++)
- linux 和 windows C++ 子线程编程中子线程的退出——总结