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
No answers yet.
Inicia sesión para dejar una respuesta
Blogs
Cómo conseguir trabajo como desarrollador Kotlin: consejos y currículum