【发布时间】:2019-11-08 00:33:42
【问题描述】:
我有一个将可变状态隐藏在 RwLock 后面的程序。我想做的是,当它被可变借用(RW_LOCK.write())时,它应该做一些事情(即尝试写入文件,清理 rwlock 后面的数据等)
例如:
let DATA: RwLock<Data> = RwLock::new(Data { content: Default::default() } );
fn do_something() {
let mut state = DATA.write().unwrap();
state.change(5);
// ...
// Here, just before `state` goes out of scope (where it gets dropped and `RwLock` will allow
// other threads read/write access to `Data`, I would like for `RwLock` to auto-run `state.cleanup()`.
}
有没有办法做到这一点,还是我必须重新实现RwLock?
【问题讨论】:
-
您的问题标题提到运行闭包,但正文引用运行
state.cleanup()。我认为标题需要更新?如果您可以使您的示例足够完整以进行编译,那也很棒。Lazy的用法似乎也与问题无关,因为可以在此示例的上下文中直接在函数中声明锁。 -
@loganfsmyth 我看不到在没有闭包的情况下调用 state.cleanup 的任何方式,但主要的一点是,当写锁被删除时,我应该能够以某种方式对 Data 做一些事情跨度>
-
你在哪里看到影响这个的关闭?我想我理解你想要什么,但我不认为我会遵循闭包的位置,所以我希望为你澄清这一点。