1、通道類似於單所有權的方式,值傳遞到通道後,發送者就無法再使用這個值;
2、共享內存類似於多所有權,即多個線程可以同時訪問相同的內存位置。
互斥器:mutex
1、任意時刻,只允許一個線程來訪問某些數據;
2、互斥器使用時,需要先獲取到鎖,使用後需要釋放鎖。
Mutex<T>
例子:
use std::sync::Mutex;
fn main() {
let m = Mutex::new(5);
{
let mut num = m.lock().unwrap(); // 獲取鎖
*num = 6;
} // 離開作用域時,自動釋放鎖
println!("m = {:?}", m);
}
Mutex<T>是一個智能指針,lock調用返回一個叫做MutexGuard的智能指針
內部提供了drop方法,實現當MutexGuard離開作用域時自動釋放鎖。
本節全部源代碼:
https://github.com/anonymousGiga/learn_rust/blob/master/learn_thread3/src/main.rs