GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen Spinlocks und Semaphoren?

Was sind die grundlegenden Unterschiede zwischen Spinlocks und Semaphoren in Aktion?

Akzeptierte Antwort:

Beide verwalten eine begrenzte Ressource. Ich werde zuerst den Unterschied zwischen binärem Semaphor (Mutex) und Spinlock beschreiben.

Spin Locks führen ein Busy Wait durch – d.h. es läuft weiter loop:

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

Es führt ein sehr leichtes Sperren/Entsperren durch, aber wenn der sperrende Thread von einem anderen, der versucht, auf dieselbe Ressource zuzugreifen, unterbrochen wird, wird der zweite einfach versuchen, Ressourcen zu erwerben, bis ihm die CPU-Quanten ausgehen.

Andererseits verhalten sich Mutex eher wie:

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

Wenn der Thread daher versucht, blockierte Ressourcen zu erwerben, wird er ausgesetzt, bis er dafür verfügbar ist. Das Sperren/Entsperren ist viel schwerer, aber das Warten ist „kostenlos“ und „fair“.

Semaphore ist eine Sperre, die mehrfach (bekannt aus der Initialisierung) verwendet werden darf – zum Beispiel dürfen 3 Threads gleichzeitig die Ressource halten, aber nicht mehr. Es wird zum Beispiel bei Producer/Consumer-Problemen oder allgemein in Queues verwendet:

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

Linux
  1. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  2. Was ist der Unterschied zwischen insmod und modprobe

  3. Was ist der Unterschied zwischen Mutex und kritischem Abschnitt?

  4. Was ist der Unterschied zwischen fsck und e2fsck?

  5. Was ist der Unterschied zwischen unlink und rm?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

Was ist der Unterschied zwischen Route und IP-Route?