Estoy intentando utilizar la función write
de RwLock
en Rust, pero estoy teniendo algunos problemas. Aquí está mi código:
use std::sync::RwLock;
fn main() {
let data = RwLock::new(0);
let mut guard = data.write().unwrap();
*guard += 1;
println!("Data: {}", *guard);
}
Cuando intento compilar esto, obtengo el siguiente error:
error[E0596]: cannot borrow `data` as mutable, as it is not declared as mutable
--> main.rs:7:18
|
7 | let mut guard = data.write().unwrap();
| ^^^^ cannot borrow as mutable
No entiendo por qué obtengo este error, ya que he declarado guard
como mutable. ¿Alguien puede ayudarme a solucionar este problema? ¿Qué estoy haciendo mal en mi código?
¡Hola Brisa!
El error que estás obteniendo no está relacionado con la mutabilidad de la variable guard
, sino con la de data
. En Rust, si quieres tener un bloque de datos sobre el cual puedas obtener un handle de escritura (write
), debes marcar la variable que posee el RwLock
como mutable. De lo contrario, Rust no te permitirá obtener un guard
mutable a través del método write
.
Aquí te dejo el código correcto:
use std::sync::RwLock;
fn main() {
let mut data = RwLock::new(0); // `data` tiene que ser mutable
let mut guard = data.write().unwrap();
*guard += 1;
println!("Data: {}", *guard);
}
He agregado mut
después de let
en la declaración de data
. Con este cambio, deberías poder compilar y ejecutar tu programa sin problemas. El RwLock
se utiliza para proporcionar acceso mutable a los datos de manera segura en un entorno de concurrencia, por lo que necesitas mutabilidad tanto en la estructura RwLock
misma como en el guard
que adquieres para modificar los datos internos.
Espero que eso aclare tus dudas. ¡Sigue adelante con Rust! Es un lenguaje bastante interesante y poderoso.