मल्टीथ्रेडिंग के लिए Rust में Mutex और RwLock का उपयोग कब करें?
नमस्ते साथियों! मैं Rust और मल्टीथ्रेडिंग सीख रहा हूँ, और मुझे दो synchronization primitives मिले: `Mutex` और `RwLock`। दोनों ही डेटा को race conditions से बचाते हैं, लेकिन मुझे पूरी तरह से समझ नहीं आ रहा कि कब किसे चुनना चाहिए।
मेरे पास एक प्रोजेक्ट है जहाँ कई threads एक shared cache (HashMap) में डेटा पढ़ते हैं और कभी-कभी लिखते भी हैं। मैंने `Mutex` के साथ एक सरल उदाहरण लिखा है, लेकिन मुझे लगता है कि यह optimal नहीं है, क्योंकि reading दूसरे readings को block कर देता है:
```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