一、通道相似於單全部權的方式,值傳遞到通道後,發送者就沒法再使用這個值;
二、共享內存相似於多全部權,即多個線程能夠同時訪問相同的內存位置。
互斥器:mutex
一、任意時刻,只容許一個線程來訪問某些數據;
二、互斥器使用時,須要先獲取到鎖,使用後須要釋放鎖。
Mutex<T>
例子:git
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.rsgithub