首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Mutex被设计成需要Rust中的Arc

为什么Mutex被设计成需要Rust中的Arc
EN

Stack Overflow用户
提问于 2019-06-13 14:37:52
回答 1查看 1.4K关注 0票数 5

如果使用Arc<T>的唯一原因是用于并发代码,即多线程,那么为什么要将Mutex<T>设计为需要Mutex<T>?首先将Mutex<T>作为原子引用的别名不是更好吗?我使用https://doc.rust-lang.org/book/ch16-03-shared-state.html作为推荐人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 14:50:26

使用Mutex不需要Arclock (Mutex上最常用的方法)的签名是pub fn lock(&self) -> LockResult<MutexGuard<T>>,这意味着您需要一个对Mutex的引用。

问题出现在借入检查器上。当将引用传递给可能比原始Mutex存活时间更长的线程时,它无法证明某些保证。这就是您使用Arc的原因,它保证只要最后一个Arc存在,内部的值就会一直存在。

代码语言:javascript
复制
use lazy_static::lazy_static; // 1.3.0
use std::sync::Mutex;
use std::thread::spawn;

lazy_static! {
    static ref M: Mutex<u32> = Mutex::new(5);
}

fn a(m: &Mutex<u32>) {
    println!("{}", m.lock().unwrap());
}

fn b(m: &Mutex<u32>) {
    println!("{}", m.lock().unwrap());
}

fn main() {
    let t1 = spawn(|| a(&M));
    let t2 = spawn(|| b(&M));

    t1.join().unwrap();
    t2.join().unwrap();
}

(Playground)

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56574632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档