Mutex 一次只能有一个读者或作者,RwLock 一次可以有一个作家或多个读者.当你这样说的时候,RwLock似乎总是更好(更少限制)Mutex,为什么我会使用它呢?
我读过什么是非词法生命周期?. 使用非词法借用检查器,编译以下代码:
fn main() {
let mut scores = vec![1, 2, 3];
let score = &scores[0]; // borrows `scores`, but never used
// its lifetime can end here
scores.push(4); // borrows `scores` mutably, and succeeds
}
Run Code Online (Sandbox Code Playgroud)
在上面的情况下似乎是合理的,但是当涉及到互斥锁时,我们不希望它过早释放。
在下面的代码中,我想先锁定一个共享结构,然后执行一个闭包,主要是为了避免死锁。但是,我不确定锁是否会过早释放。
use lazy_static::lazy_static; // 1.3.0
use std::sync::Mutex;
struct Something;
lazy_static! {
static ref SHARED: Mutex<Something> = Mutex::new(Something);
}
pub fn lock_and_execute(f: Box<Fn()>) {
let _locked = SHARED.lock(); // `_locked` is never used.
// does its lifetime end here?
f();
}
Run Code Online (Sandbox Code Playgroud)
Rust …
当对象有时可能被一个所有者写入时,在多个线程之间共享公共对象的正确方法是什么?
我尝试Configuration使用几种方法创建一个特征对象来获取和设置配置密钥.我想将其传递给可以读取配置项的其他线程.奖励积分将是每个人都可以写和阅读.
我找到了一个Reddit线程,谈论Rc和RefCell; 那会是正确的方法吗?我认为这些不允许我多次借用对象并仍然改变它.