Beim Abrufen wird wiederholt geprüft, ob eine Ressource (eine beliebige Ressource) bereit ist.
Ein Spinlock ist, wenn die Ressource, die Sie abfragen, eine Sperre ist.
Beachten Sie, dass das Polling nicht schlecht ist. Das Abrufen ist insbesondere dann effizient, wenn zum Zeitpunkt des Abrufs in der Regel Daten verfügbar sind. Abfragen sind nur dann ineffizient, wenn Sie dies tun, ohne dass Daten zurückgegeben werden.
Interrupts hingegen sind ineffizient, wenn so viele Daten vorhanden sind, dass Sie ständig unterbrochen werden. Sie sind effizient, wenn Daten selten genug eingehen, dass Sie nützliche Arbeiten erledigen können, bevor Sie unterbrochen werden.
Ich kann Ihnen ein reales Beispiel aus eigener Erfahrung geben: Vor 15 Jahren hatte ich mein E-Mail-Programm so eingerichtet, dass es mich jedes Mal unterbrach, wenn eine neue E-Mail einging. Dies geschah ein- oder zweimal pro Woche. Das ständige Überprüfen meines Posteingangs wäre eine gewaltige Zeitverschwendung gewesen.
Heutzutage habe ich alle Benachrichtigungen deaktiviert. Ich weiß, dass es dort immer neue E-Mails geben wird, wenn ich in meinen Posteingang schaue. Polling ist jetzt viel effizienter.
Spinlocks sind effizient, wenn a) die Wahrscheinlichkeit, dass die Sperre ergriffen wird, gering ist, und b) wenn die Sperre ergriffen wird, wird sie nur für eine kurze Zeit gehalten. Mit anderen Worten: Es ist effizient für größtenteils unbearbeitete feinkörnige Schleusen, aber ineffizient für stark umkämpfte grobkörnige Schleusen.
(Und natürlich funktionieren Spinlocks nur, wenn es eine echte Parallelität gibt, sonst hat der andere Thread keine Chance, die Sperre aufzuheben. Ich denke, das liegt auf der Hand, aber ich wollte es trotzdem sagen.)