es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Estos códigos producirán un bloqueo utilizando Rust Dashmap?

¿Estos códigos alguna vez producirán un interbloqueo utilizando una DashMap en Rust?

// snippet_1
let a = DashMap::new();
let b = DashMap::new();

// thread1
for v in a.iter(){
   xxx
}
for v in b.iter(){
   xxx
}

//thread2
for v in b.iter(){
   xxx
}
for v in a.iter(){
   xxx
}
// snippet_2
let a = DashMap::new();
let b = DashMap::new();

// thread1
for v in a.iter(){
   xxx
}
for v in b.iter(){
   xxx
}

//thread2
for v in b.iter(){
   xxx
   for v in a.iter() {
      xxx
   }
   xxx
}
// snippet_3
let a = DashMap::new();
let b = DashMap::new();

// thread1
for v in a.iter(){
   xxx
}
for v in b.iter(){
   xxx
}

//thread2
for v in b.iter(){
   xxx
   let Some(v) = a.get_mut(key){
      xxx
   }
   xxx
}

Además, insertar en una DashMap al iterar en el mismo hilo producirá un interbloqueo. Sin embargo, insertar en una DashMap desde otro hilo no producirá un interbloqueo. ¿Es eso cierto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    De los tres fragmentos de código proporcionados, solo snippet_2 tiene el potencial de producir un bloqueo en Rust al usar DashMap.

    La razón de esto es porque thread2 itera sobre b y luego sobre a en iteraciones anidadas, y si al mismo tiempo thread1 también está iterando sobre a y luego sobre b, pueden terminar en un bloqueo si cada hilo tiene un bloqueo en un mapa diferente mientras espera adquirir un bloqueo en el otro mapa.

    Insertar en un DashMap mientras se itera en el mismo hilo realmente puede producir un bloqueo, ya que intentará adquirir un bloqueo en el mapa durante la iteración y luego nuevamente durante la inserción, lo que potencialmente causa un estado bloqueado. Sin embargo, insertar en un DashMap desde otro hilo no producirá un bloqueo, ya que DashMap está diseñado para permitir operaciones concurrentes, incluidas inserciones y búsquedas desde múltiples hilos.

    Por lo tanto, al trabajar con DashMap en Rust, es importante tener en cuenta las posibles condiciones de carrera y bloqueos causados por múltiples hilos que acceden al mismo mapa simultáneamente.

Comments are closed.