Rust 如何以锁定结构的方式锁定生锈的结构?
我正在努力学习如何用锁的工作方式锁锈。使用Go,我可以做以下事情: 类型信息结构{ sync.RWMutex 高度uint64 验证布尔 } 如果我有一些作用于信息的函数/方法,我可以这样做: func i*信息DoStuffmyType数据错误{ i、 锁 //做我的事 } 看起来我需要的是sync.RWMutex,所以这是我尝试过的:Rust 如何以锁定结构的方式锁定生锈的结构?,rust,locking,mutex,Rust,Locking,Mutex,我正在努力学习如何用锁的工作方式锁锈。使用Go,我可以做以下事情: 类型信息结构{ sync.RWMutex 高度uint64 验证布尔 } 如果我有一些作用于信息的函数/方法,我可以这样做: func i*信息DoStuffmyType数据错误{ i、 锁 //做我的事 } 看起来我需要的是sync.RWMutex,所以这是我尝试过的: pub struct Info { pub lock: sync.RWMutex, pub height: u64, pub veri
pub struct Info {
pub lock: sync.RWMutex,
pub height: u64,
pub verify: bool,
}
这是正确的方法吗?我该如何从这里开始呢?不要走老路,要走老路。和是泛型;您将要锁定的数据放入其中。稍后,您将通过锁防护装置访问数据。当锁护罩超出范围时,锁释放:
use std::sync::RwLock;
#[derive(Debug, Default)]
struct Info {
data: RwLock<InfoData>,
}
#[derive(Debug, Default)]
struct InfoData {
height: u64,
verify: bool,
}
fn main() {
let info = Info::default();
let mut data = info.data.write().expect("Lock is poisoned");
data.height += 42;
}
Go解决方案是次优的,因为没有任何东西强迫您实际使用锁;您可能会忘记获取锁定并访问仅应在锁定时使用的数据
如果必须锁定非数据的内容,可以锁定空元组:
use std::sync::RwLock;
#[derive(Debug, Default)]
struct Info {
lock: RwLock<()>,
height: u64,
verify: bool,
}
fn main() {
let mut info = Info::default();
let _lock = info.lock.write().expect("Lock is poisoned");
info.height += 42;
}
另见:
这个问题没有显示出研究的努力。有例子的要点。在同一个模块中,还有一些示例。@Shepmaster我不明白这些示例与结构的关系,抱歉。