我有一个 Arc<RwLock<Foo>>
。
是否有一种方法可以在其中不使用 RwLock
的 write() 方法?即是否有某种形式的 RLock
可以从 RwLock
中创建。
应用场景:我有一个 Foo
。我的代码中有多个部分需要对 Foo 进行修改(因此需要 RwLock),但大部分代码只能以只读方式访问 Foo。
是否有实现这一点的方法?或者是否有一种方法可以在没有使用 RwLock
的情况下完成这个目标?
编写你自己的结构体,包含 Arc<RwLock<Foo>>
。
#[derive(Clone, Debug)]
pub struct FooReadOnly(Arc<RwLock<Foo>>);
impl FooReadOnly {
pub fn read(&self) -> LockResult<RwLockReadGuard<'_, Foo>> {
self.0.read()
}
}
read
返回LockGuard
(甚至是包装的Result
)。 - NetwaveRwLock
,而是使用Arc::get_mut()
。 - Chayim FriedmanArc<RwLock<Foo>>
的克隆体在不同的线程中。 - fadedbee