Was sind die grundlegenden Unterschiede zwischen Spin-Locks und Semaphoren in Aktion?
Was sind die grundlegenden Unterschiede zwischen Spin-Locks und Semaphoren in Aktion?
Antworten:
Beide verwalten eine begrenzte Ressource. Ich werde zuerst den Unterschied zwischen binärem Semaphor (Mutex) und Spin Lock beschreiben.
Spin-Locks führen eine ausgelastete Wartezeit aus - dh es wird weiterhin eine Schleife ausgeführt:
while (try_acquire_resource ());
...
release();
Es führt ein sehr leichtes Sperren / Entsperren durch, aber wenn der Sperr-Thread von einem anderen vorbelegt wird, der versucht, auf dieselbe Ressource zuzugreifen, versucht der zweite einfach, Ressourcen zu beschaffen, bis ihm die CPU-Quanten ausgehen.
Andererseits verhält 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 versucht, gesperrte Ressourcen zu erhalten, wird er ausgesetzt, bis er für ihn verfügbar ist. Das Sperren / Entsperren ist viel schwerer, aber das Warten ist "kostenlos" und "fair".
Semaphore ist eine Sperre, die mehrfach (aus der Initialisierung bekannt) verwendet werden darf - zum Beispiel dürfen 3 Threads gleichzeitig die Ressource halten, aber nicht mehr. Es wird zum Beispiel in Erzeuger- / Verbraucherproblemen oder allgemein in Warteschlangen verwendet:
P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)
Spinlocks werden in einem Interrupt-Kontext verwendet, in dem das Schlafen nicht erlaubt ist. Sie rufen in einer engen Schleife ab und tun nichts anderes, bis die Ressource beschafft ist. Wird hauptsächlich in ISRs verwendet und ist sicherer und effizienter.
Semaphore können in einem Prozesskontext verwendet werden, in dem das Schlafen in Ordnung ist.
Hier ist meine kurze Antwort: Eine Drehsperre und ein binäres Semaphor (das eine Ressource verwaltet, die nur von einer Sache verwendet werden kann) sind fast identisch. Sie unterscheiden sich darin, dass Spin-Locks den auszuführenden Code verwalten, während binäre Semaphore eine Art singuläre Ressource verwalten (z. B. CPU-Zeit, Anzeigeausgabe).
Ein reguläres Semaphor kann jedoch mehrere Threads verwalten, die auf eine Ressource zugreifen, die auf mehrere aufgeteilt werden kann, jedoch begrenzt ist (z. B. Speicher, Netzwerkbandbreite).
Kurz gesagt, ein Spin-Lock fragt wahrscheinlich immer wieder ein Semaphor, ob es eine Ressource verwenden kann. (Stellen Sie sich vor, ein Kind muss auf die Toilette und darauf warten, dass jemand anderes fertig wird.)
Quellen: Einführung in die Systemprogrammierung, Betriebssysteme und Wikipedia