Avatar ·

متى تستخدم 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