Rust语言

关注公众号 jb51net

关闭
首页 > 软件编程 > Rust语言 > Rust  Mutex 用法

Rust 中 Mutex 的基本用法

作者:许野平

Rust 标准库中的 Mutex 结构体位于 std::sync::Mutex 中,它提供了线程安全的数据访问,Mutex 保证了在同一时间只有一个线程可以访问被锁定的数据,这篇文章主要介绍了Rust 中 Mutex 的基本用法,需要的朋友可以参考下

在 Rust 中,Mutex(互斥锁)是用于同步并发访问共享资源的机制。Rust 标准库中的 Mutex 结构体位于 std::sync::Mutex 中,它提供了线程安全的数据访问。Mutex 保证了在同一时间只有一个线程可以访问被锁定的数据。

以下是 Mutex 的基本用法:

创建一个 Mutex 对象:

use std::sync::Mutex;
let mutex = Mutex::new(0); // 初始化 Mutex,锁定一个初始值为 0 的数据。

锁定 Mutex 以访问其内部数据:

let mut guard = mutex.lock().unwrap(); // 锁定 Mutex,unwrap() 用于处理 Result 类型,简化错误处理
*guard += 1; // 通过 MutexGuard 修改内部数据
// 当 MutexGuard 离开作用域时,锁会自动释放

在多线程环境中使用 Mutex

use std::sync::Mutex;
use std::thread;
let counter = Mutex::new(0);
let mut handles = vec![];
for _ in 0..10 {
    let counter = counter.clone(); // 克隆 Mutex 以在多个线程中使用
    handles.push(thread::spawn(move || {
        let mut num = counter.lock().unwrap();
        *num += 1;
    }));
}
// 等待所有线程完成
for handle in handles {
    handle.join().unwrap();
}
let result = counter.lock().unwrap();
println!("Result: {}", *result); // 应该输出 10,但并发错误可能导致小于 10 的结果

注意:

如果你想避免由于线程调度导致的竞态条件,可以考虑使用其他同步原语,如 AtomicUsizeBarrierCondvar 等,或者使用消息传递(如使用 mpsc 通道)来避免共享状态。

到此这篇关于Rust 中 Mutex 的用法的文章就介绍到这了,更多相关Rust Mutex 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文