GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi Spin Locks a Semafory?

Jaké jsou základní rozdíly mezi zámky otáčení a semafory v akci?

Přijatá odpověď:

Oba spravují omezený zdroj. Nejprve popíšu rozdíl mezi binárním semaforem (mutex) a spin lockem.

Zámky otáčení provádějí rušné čekání – tj. stále běží smyčka:

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

Provádí velmi lehké zamykání/odemykání, ale pokud bude zamykací vlákno zabráněno jiným, které se pokusí získat přístup ke stejnému zdroji, druhé se jednoduše pokusí získat zdroj, dokud mu nedojdou kvanta CPU.

Na druhou stranu se mutex chová spíše jako:

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

Pokud se tedy vlákno pokusí získat blokovaný zdroj, bude pozastaveno, dokud pro něj nebude dostupné. Zamykání/odemykání je mnohem těžší, ale čekání je „zdarma“ a „spravedlivé“.

Semafor je zámek, který lze použít vícekrát (známý z inicializace) několikrát – například 3 vlákna mohou současně držet zdroj, ale ne více. Používá se například v problému producent/spotřebitel nebo obecně ve frontách:

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

Linux
  1. Jaký je rozdíl mezi Redhat a centOS?

  2. Jaký je rozdíl mezi insmod a modprobe

  3. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  1. Jaký je rozdíl mezi adduser a useradd?

  2. Jaký je rozdíl mezi ls a l?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  2. Jaký je rozdíl mezi Git Switch a Checkout?

  3. Jaký je rozdíl mezi mutexem a kritickou sekcí?