Skip to content

Latest commit

 

History

History
33 lines (25 loc) · 1.04 KB

mutex.md

File metadata and controls

33 lines (25 loc) · 1.04 KB

多线程之间可以访问同一个共享变量。不过为了安全起见,需要使用Mutex互斥器。 关联函数 new 来创建一个 Mutex。使用 lock 方法获取锁。这里我们使用 Mutex 浮点数。

另外还需要将new出来的Mutex进行克隆,因为一个线程在获取锁之后,另一个线程将无法获取锁。 值得注意的是,跨线程之间的克隆需要使用现成安全的原子引用计数Arc

如下是一个在多线程之间访问同一个共享变量,并使用Mutex避免数据竞争的示例:

use std::sync::{Mutex, Arc};
use std::thread;

fn main() {
    let counter = Arc::new(Mutex::new(0.1));
    let mut handles = vec![];

    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            let mut num = counter.lock().unwrap();

            *num += 1.1;
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("Result: {}", *counter.lock().unwrap());
}