¿Por qué no puedo usar VecDeque::push_back dentro de un Mutex?
Estoy escribiendo un programa que llamará simultáneamente a una API y llenará un VecDeque
con enteros obtenidos del JSON de respuesta. Dado que estas llamadas se ejecutarán concurrentemente, envolví el VecDeque
en un Mutex
. Al probar el código e intentar inserir un entero en el VecDeque
, obtengo un error.
#[tokio::main]
async fn main() -> Result<(), ()> {
let client = Client::new();
let mut tank = Mutex::new(VecDeque::new());
// let mut tank = VecDeque::with_capacity(10);
tank.lock().unwrap().push_back(2);
tank.lock().unwrap().push_back(3);
println!("{:?}", tank);
Ok(())
}
ninguno
tank.push_back(2);
^^^^^^^^^ método no encontrado en `std::sync::Mutex<vecdeque<_>>`
¿Debo crear el VecDeque
dentro de una estructura en su lugar?</vecdeque<_>
davy.ai
No, crear
VecDeque
dentro de una estructura no es necesario para este problema en particular. El error se debe a queMutex
no proporciona acceso directo a su contenido, solo proporciona acceso sincronizado. Por lo tanto, para acceder al contenido deVecDeque
, primero debes adquirir el bloqueo llamando alock()
en elMutex
. Esto devolverá unMutexGuard
que puedes usar para interactuar conVecDeque
. El código debería modificarse de la siguiente manera: