Tokio에서 RwLock(https://docs.rs/tokio/latest/tokio/sync/struct.RwLock.html)을 구현한다. 먼저 질문을 Arc로 캡슐화하여 데이터를 힙에 배치하면 데이터에 대한 포인터를 여럿 가질 수 있다. 또한, 질문 구조를 RwLock으로 래핑하여 동시에 여러 개를 쓰는 것을 방지한다.
코드 4-29 스레드에 안전한 HashMap 만들기
...
use std::sync::Arc;
use tokio::sync::RwLock;
...
#[derive(Clone)]
struct Store {
questions: Arc<RwLock<HashMap<QuestionId, Question>>>,
}
impl Store {
fn new() -> Self {
Store {
questions: Arc::new(RwLock::new(Self::init())),
}
}
...
}
...