相关疑难解决方法(0)

我何时或为什么要在RwLock上使用Mutex?

当我读到的单证MutexRwLock,我看到区别如下:

  • Mutex 一次只能有一个读者或作者,
  • RwLock 一次可以有一个作家或多个读者.

当你这样说的时候,RwLock似乎总是更好(更少限制)Mutex,为什么我会使用它呢?

multithreading mutex readwritelock rust

13
推荐指数
2
解决办法
1633
查看次数

非词法生命周期借用检查器会过早释放锁吗?

我读过什么是非词法生命周期?. 使用非词法借用检查器,编译以下代码:

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 …

mutex raii rust borrow-checker

6
推荐指数
2
解决办法
475
查看次数

我用什么来分享Rust中的许多线程和一个编写器的对象?

当对象有时可能被一个所有者写入时,在多个线程之间共享公共对象的正确方法是什么?

我尝试Configuration使用几种方法创建一个特征对象来获取和设置配置密钥.我想将其传递给可以读取配置项的其他线程.奖励积分将是每个人都可以写和阅读.

我找到了一个Reddit线程,谈论RcRefCell; 那会是正确的方法吗?我认为这些不允许我多次借用对象并仍然改变它.

rust

3
推荐指数
1
解决办法
492
查看次数