私のメソッドのメソッドを同期させて実行したい。ガードを使用する際のミューテックス借用の問題を避ける方法
use std::sync::Mutex;
use std::collections::BTreeMap;
pub struct A {
map: BTreeMap<String, String>,
mutex: Mutex<()>,
}
impl A {
pub fn new() -> A {
A {
map: BTreeMap::new(),
mutex: Mutex::new(()),
}
}
}
impl A {
fn synchronized_call(&mut self) {
let mutex_guard_res = self.mutex.try_lock();
if mutex_guard_res.is_err() {
return
}
let mut _mutex_guard = mutex_guard_res.unwrap(); // safe because of check above
let mut lambda = |text: String| {
let _ = self.map.insert("hello".to_owned(),
"d".to_owned());
};
lambda("dd".to_owned());
}
}
エラーメッセージを:私はMutex
(Playground)を使用してこれをやってみたかった私たちは私たちが借りまで他の構造体のフィールドを使用することができない構造体から何かを借りるときに私は理解したよう
error[E0500]: closure requires unique access to `self` but `self.mutex` is already borrowed
--> <anon>:23:26
|
18 | let mutex_guard_res = self.mutex.try_lock();
| ---------- borrow occurs here
...
23 | let mut lambda = |text: String| {
| ^^^^^^^^^^^^^^ closure construction occurs here
24 | if let Some(m) = self.map.get(&text) {
| ---- borrow occurs due to use of `self` in closure
...
31 | }
| - borrow ends here
終了です。しかし、私はどのようにしてメソッド同期を行うことができますか?
を、お願いします?それはたくさんの助けになります! –
@ LukasKalbertodt私はすでにそれをやっています:) –
ありがとうたくさん!私はあなたの答えを少し編集しました、私はあなたが気にしないことを願っています。私はこの形で答える方が簡単だと思います。 –