rustp-32.互斥器
互斥器
- 通道类似于单所有权的方式,值传递到通道后,发送者无法使用这个值
- 共享内存类似于多所有权,多个线程可以同时访问相同的内存位置
互斥器: mutex - 任意时刻,只允许一个线程来访问某些数据
- 互斥器使用的时候,需要先获取到锁,使用后需要释放锁(类似死锁,相互等待)
- Mutex
是一个智能指针,lock调用返回一个叫做MutexGuard的智能指针,Mutex内部提供了drop方法,实现当MutexGuard离开作用域时自动释放锁。
1 | //Mutex<T> |
互斥器例子
- 没有实现copy trait
1 | use std::sync::Mutex; |
- 正解:使用Rc指针共享内存数据,但是Rc在线程之间不能够安全的发送,和RefCell适用于单线程
rust提供了在线程之间安全共享的叫做arc
1 | use std::sync::Mutex; |
Comment