GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la diferencia entre bloqueos giratorios y semáforos?

¿Cuáles son las diferencias básicas entre bloqueos giratorios y semáforos en acción?

Respuesta aceptada:

Ambos gestionan un recurso limitado. Primero describiré la diferencia entre el semáforo binario (mutex) y el bloqueo de giro.

Los bloqueos giratorios realizan una espera ocupada, es decir, sigue ejecutando el bucle:

while (try_acquire_resource ());
...
release();

Realiza un bloqueo/desbloqueo muy ligero, pero si el subproceso de bloqueo es reemplazado por otro que intentará acceder al mismo recurso, el segundo simplemente intentará adquirir el recurso hasta que se quede sin cantidad de CPU.

Por otro lado, mutex se comporta más como:

if (!try_lock()) {
    add_to_waiting_queue ();
    wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();   

Por lo tanto, si el subproceso intenta adquirir un recurso bloqueado, se suspenderá hasta que esté disponible para ello. Bloquear/desbloquear es mucho más pesado pero la espera es 'gratis' y 'justa'.

Semaphore es un bloqueo que se puede usar varias veces (conocido por la inicialización); por ejemplo, se permite que 3 subprocesos mantengan el recurso simultáneamente, pero no más. Se usa por ejemplo en problema productor/consumidor o en general en colas:

P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)

Linux
  1. ¿Cuál es la diferencia entre Redhat y centOS?

  2. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?

  3. ¿Cuál es la diferencia entre adduser y useradd?

  4. ¿Cuál es la diferencia entre ls y l?

  5. ¿Cuál es la diferencia entre `su -` y `su --login`?

¿Cuál es la diferencia entre InnoDB y MyISAM?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?