GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra spin lock e semafori?

Quali sono le differenze fondamentali tra spin lock e semafori in azione?

Risposta accettata:

Entrambi gestiscono una risorsa limitata. Descriverò prima la differenza tra semaforo binario (mutex) e blocco dello spin.

Gli spin lock eseguono un'attesa intensa, ovvero continua a funzionare in loop:

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

Esegue un blocco/sblocco molto leggero, ma se il thread di blocco verrà anticipato da altri che proveranno ad accedere alla stessa risorsa, il secondo proverà semplicemente ad acquisire la risorsa fino a quando non esaurirà i suoi quanti di CPU.

D'altra parte il mutex si comporta più come:

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

Quindi, se il thread tenterà di acquisire una risorsa bloccata, verrà sospeso fino a quando non sarà disponibile per esso. Il blocco/sblocco è molto più pesante, ma l'attesa è "gratuita" e "equa".

Il semaforo è un blocco che può essere utilizzato più volte (conosciuto dall'inizializzazione), ad esempio 3 thread possono contenere contemporaneamente la risorsa ma non di più. Viene utilizzato ad esempio nel problema produttore/consumatore o in generale nelle code:

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

Linux
  1. Qual è la differenza tra Redhat e centOS?

  2. Qual è la differenza tra fsck ed e2fsck?

  3. Qual è la differenza tra ls e l?

  4. Qual è la differenza tra `su -` e `su --login`?

  5. Qual è la differenza tra $(CC) e $CC?

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

Qual è la differenza tra il comando apt e apt-get?

Qual è la differenza tra Git Switch e Checkout?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?