5. Rust基件: Mutex/RwLock

幻灰龙 2021-06-09 09:14:33

上一条: RefCell  下一条: 跨线程传递/共享

无论是Cell还是RefCell,都是单线程语义下达到内部可变性的能力。在多线程情况下,同样存在一个【不可变借用的内部成员变量可变】的需求。此时,就需要加锁,Rust的Mutext/RwLock不但实现了锁的能力,同时提供了多线程下内部可变性的能力

use std::task;
use std::sync::{Mutex, RwLock}
 
struct Test{
  x: u32
}

// 使用Arc涉及到 内部共享(`Internal sharing`),参考后面
let v = Arc::new(Mutex::new(Test{x:10}))

let v1 = v.clone();
task::spawn(async move {
      // 解锁+获得不可变借用
      let v = v1.lock().unwrap();
});

let v2 = v.clone();
task::spawn(async move {
      // 解锁+获得可变借用
      let mut v = v1.lock().unwrap();
});


 

...全文
3915 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,725

社区成员

发帖
与我相关
我的任务
社区描述
Rust是新一代大规模底层系统平台开发的强力选项,拥有现代的类型系统,精确的生命周期控制,流畅的表达力和错误处理,以及明晰的异步编程范式。
rust 个人社区
社区管理员
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
社区主要目的: 1. 讨论Rust的核心语法语义 2. 讨论Rust的编程范式、最佳实践。 3. 讨论10x创新技术

试试用AI创作助手写篇文章吧