متى تستخدم Mutex ومتى تستخدم RwLock في Rust لتعدد الخيوط؟
مرحباً أيها الزملاء! أنا أتعلم Rust وتعدد الخيوط، وقد صادفت بدائيين للمزامنة: `Mutex` و `RwLock`. يبدو أن كلاهما يحمي البيانات من سباقات البيانات، لكنني لا أفهم تماماً متى أختار أياً منهما.
لدي مشروع حيث تقرأ عدة خيوط البيانات وتكتبها أحياناً في cache مشترك (HashMap). لقد كتبت مثالاً بسيطاً باستخدام `Mutex`، لكني أشعر أن هذا ليس مثالياً لأن القراءة تمنع القراءات الأخرى:
```rust
use std::sync::{Arc, Mutex};
use std::thread;
use std::collections::HashMap;
fn main() {
let cache = Arc::new(Mutex::new(HashMap::new()));
let mut handles = vec![];
for i in 0..10 {
let cache = Arc::clone(&cache);
handles.push(thread::spawn(move || {
let mut data = cache.lock().unwrap();
data.insert(i, for
```