【发布时间】:2021-12-24 07:43:38
【问题描述】:
我有一个Arc<RwLock<Foo>>。
有没有办法从中做出一些事情,RwLock 的 write() 不存在?即是否有某种形式的RLock,我可以从RwLock 制作。
用例:我有一个Foo。我的代码中不止一部分需要对 Foo 进行变异(因此是 RwLock),但我的大部分代码只能对 Foo 具有只读访问权限。
有没有办法做到这一点?或者没有RwLock有没有办法做到这一点?
【问题讨论】:
-
只需从
read返回LockGuard(甚至是包装好的Result) -
如果没有具体的例子很难回答,但您可以尝试不使用
RwLock,而是使用Arc::get_mut()。 -
@ChayimFriedman 不幸的是,我在不同的线程中有多个
Arc<RwLock<Foo>>的克隆。 -
@fadedbee,你需要在某个时候释放锁,你不应该有对病房的引用(因为它会一直被锁定,所以你不能写它) ,但您可以根据需要阅读任意数量的内容。