我正在尝试封装一些代码,以避免重复,涉及从Mutex中借用数据并进行进一步操作(这些操作超出了本问题的范围,但是它们是推动因素)。
以下示例代码抱怨
这是借用检查器的限制吗?有什么关于解决此问题的建议吗?
以下示例代码抱怨
guard
没有足够长的生命周期。但这正是我在专门设计用于此目的的结构中返回guard
的原因。这是借用检查器的限制吗?有什么关于解决此问题的建议吗?
use std::sync::{Mutex,MutexGuard};
use std::ops::DerefMut;
pub struct InnerData {
count: i32 // sample only
}
pub struct Data {
pub inner_data: Mutex<InnerData>
}
pub struct BorrowedInnerData<'a> {
pub inner_data: &'a mut InnerData,
guard: MutexGuard<'a,InnerData>,
}
impl Data {
pub fn borrow_inner_data<'a>(&'a mut self) -> BorrowedInnerData<'a> {
let guard = self.inner_data.lock().unwrap();
BorrowedInnerData {
inner_data: guard.deref_mut(),
guard: guard,
}
}
}
fn main() {
let mut data = Data {
inner_data: Mutex::new( InnerData {
count: 5
}),
};
let borrowed_inner_data = data.borrow_inner_data();
}