으로 변환합니다. 참고 문헌을 통해 변형 될 수있는 특성을 지니고 있습니다.아크 <RwLock>을 & mut
trait MyTrait {
fn name<'a>(&'a mut self) -> &'a mut String;
}
struct SimpleImpl {
name: String
}
impl MyTrait for SimpleImpl {
fn name<'a>(&'a mut self) -> &'a mut String {
&mut self.name
}
}
use std::sync::{Arc,RwLock};
struct ParallelImpl {
name: Arc<RwLock<String>>
}
impl MyTrait for ParallelImpl {
fn name<'a>(&'a mut self) -> &'a mut String {
self.name.get_mut().unwrap()
}
}
fn main() {
let mut a = SimpleImpl { name: String::from("simple") };
let mut b = ParallelImpl { name: Arc::new(RwLock::new(String::from("parallel"))) };
a.name().as_mut_str();
b.name().as_mut_str();
}
이 왜 수 없습니다
main2.rs:23:9: 23:18 error: cannot borrow immutable borrowed content as mutable
main2.rs:23 self.name.get_mut().unwrap()
와 함께 컴파일에 실패 : 문제는 String
값이 매우 크고 많은 스레드가 액세스 할 수 있으므로 내 솔루션을 이런 식으로 뭔가를 보이는 것입니다 으로 전화하여 Arc
과 RwLock
을 모두 푸십시오.
이것은 ['owning_ref'] (https://kimundi.github.io/owning-ref-rs/owning_ref/index.html)에 대한 또 다른 직업처럼 보입니다. 나무 상자. 참조와 매우 유사하게 행동하지만 가드를 유지하는 ['RwLockWriteGuardRef'] (https://kimundi.github.io/owning-ref-rs/owning_ref/type.RwLockWriteGuardRef.html) 유형을 포함합니다. –