Avatar ·

Cuándo usar Mutex y cuándo RwLock en Rust para multithreading

¡Hola, colegas! Estoy aprendiendo Rust y multithreading, y me encontré con dos primitivas de sincronización: `Mutex` y `RwLock`. Ambas parecen proteger los datos de las carreras, pero no entiendo bien cuándo elegir cuál. Tengo un proyecto donde varios hilos leen y, a veces, escriben datos en un caché compartido (HashMap). Escribí un ejemplo simple con `Mutex`, pero siento que no es óptimo porque la lectura bloquea otras lecturas: ```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, format!("value_{}", i)); // La lectura también requiere bloqueo let val = data.get(&i).cloned(); println!("Thread {} got {:?}", i, val); })); } for