DE112004001564T5 - Low-contention Lock - Google Patents

Low-contention Lock Download PDF

Info

Publication number
DE112004001564T5
DE112004001564T5 DE112004001564T DE112004001564T DE112004001564T5 DE 112004001564 T5 DE112004001564 T5 DE 112004001564T5 DE 112004001564 T DE112004001564 T DE 112004001564T DE 112004001564 T DE112004001564 T DE 112004001564T DE 112004001564 T5 DE112004001564 T5 DE 112004001564T5
Authority
DE
Germany
Prior art keywords
lock
thread
state
queue
acquire
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE112004001564T
Other languages
English (en)
Inventor
Grant Mahomet Haab
Sanjiv Champaign Shah
Paul Champaign Petersen
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112004001564T5 publication Critical patent/DE112004001564T5/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Abstract

Verfahren zum Verwalten eines von einem Thread benutzten Locks, das folgendes umfasst:
– Wählen einer Aktion, um auf das Lock einzuwirken, wobei die Aktion aus einer Gruppe ausgewählt wird, die umfasst:
– Erwerben des Locks;
– Versuchen, das Lock zu erwerben; und
– Freigeben des Locks;
– asynchrones Abfragen des aktuellen Zustands des Locks, das einen Mehrwertzustand aufweist;
– spekulatives Bestimmen des nächsten Zustands des Locks; und
– Versuchen, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.

Description

  • HINTERGRUND
  • 1. Gebiet
  • Die vorliegende Offenbarung betrifft das Erwerben und Freigeben einer geteilten Ressource über ein Lock-Semaphor, und insbesondere das Erwerben und Freigeben einer geteilten Ressource über ein Lock-Semaphor, das eine Zustandsmaschine benutzt.
  • 2. Hintergrundinformation
  • Typischerweise erlauben es Prozess- oder Computersysteme mehreren Programmen, im wesentlichen simultan auszuführen. Mehrere Programme können im wesentlichen simultan ausführen, indem sie Techniken wie z. B. Zeitscheibentechnik, Parallelausführung oder Multiprozessormaschinen benutzen. Außerdem ist es für mehrere Teile eines Programms oder für Threads möglich, in nahezu derselben Weise im wesentlichen simultan auszuführen. Techniken, die eine solche im wesentlichen simultane Ausführung ermöglichen, werden oft als Multitasking, Multithreading oder Hyper-Threading bezeichnet. Ein Beispiel für eine Multitasking-Technik erlaubt es, einen Musikabspieler und eine Textverarbeitungsprogramm im wesentlichen simultan zu betreiben, so daß die Nutzer Musik hören können, während sie ein Dokument schreiben. Ein Beispiel für eine Multithreading-Technik kann ein Textverarbeitungsprogramm sein, das das Verändern eines Dokuments erlaubt, während das Dokument zur gleichen Zeit gedruckt wird.
  • Diese Threads, Prozesse oder Programme, die im Folgenden kollektiv als „Threads" bezeichnet werden sollen, greifen oft auf geteilte Ressourcen zurück. Diese geteilten Ressourcen können physikalische Hardware oder andere Abschnitte von ausführbaren Befehlen wie z. B. einer gemeinsamen Bibliothek beinhalten. Diese geteilten Ressourcen können möglicherweise nicht im wesentlichen simulatan von mehreren Threads benutzt werden. Beispielsweise ist es für einen Drucker nicht üblich, zwei oder mehr Dokumente zugleich auszudrucken; in einer Multithread-Umgebung allerdings können jedoch zwei oder mehr Threads versuchen, gleichzeitig am Drucker auszudrucken. Dies ist natürich nur ein Beispiel einer geteilten Ressource, die nicht im wesentlichen simultan von mehreren Threads benutzt werden kann.
  • Es ist eine Reihe von Techniken bekannt, um Fehler oder unerwünschte Auswirkungen zu verhindern, die auftreten können, wenn mehrere Threads versuchen, simultan eine geteilte Ressource zu benutzen. Bei einer Technik kann der Thread-Zugriff auf eine geteilte Ressource von einem Semaphor-Lock, im Folgenden bezeichnet als „Lock", gesteuert sein. In diesem Kontext ist ein Lock ein Signal oder eine Flagvariable, die benutzt wird, um den Zugriff auf geteilte Systemressourcen zu steuern. Ein Lock zeigt anderen potentiellen Nutzern oder Threads oft an, dass eine Datei oder andere Ressource gerade benutzt wird, und verhindert den Zugriff durch mehr als einen Nutzer oder Thread.
  • Beim oben aufgeführten Druckerbeispiel kann ein erster Thread ein Lock für den Drucker erwerben, das Dokument drucken und dann das Lock für den Drucker freigeben. Der zweite Thread kann versuchen, das Lock für den Drucker zu erwerben. Wird festgestellt, dass der Drucker bereits durch den ersten Thread gesperrt ist, und der zweite Thread wartet oft darauf, das Lock zu erwerben. Wenn der erste Thread den Drucker freigibt, kann nun der zweite Thread das Drucker-Lock erwerben, das zweite Dokument drucken und das Lock für den Drucker freigeben. In diesem Beispiel ist die Zugriffskonkurrenz gesteuert.
  • Oft kann ein einzelner Thread zu einer gegebenen Zeit mehrere Locks besitzen. Beim Einsatz traditioneller Techniken ist dann, wenn ein Thread mehrere Locks zur selben Zeit besitzt, die assoziierte dynamische Speicherzuweisung und -freigabe oft zur Summe der Anzahl von Locks, der Anzahl von Threads und der Anzahl von Lock-Aneignungen proportional. Bei modernen Systemen ist die resultierende Zahl oft recht groß. Zusätzlich können häufige Speicherzuweisungen und -freigaben eine große Menge an Prozesszeit und anderen Systemressourcen verbrauchen. Es besteht deshalb Bedarf nach einem verbesserten System oder einer verbesserten Technik zum Durchführen des Erwerbens und Freigebens einer geteilten Ressourcen über ein Lock-Semaphore.
  • DETAILLIERTE BESCHREIBUNG DER FIGUREN
  • Der Gegenstand ist in den abschließenden Teilen der Beschreibung identifiziert und spezifisch beansprucht. Der offenbarte Gegenstand kann jedoch hinsichtlich Aufbau und Betriebsverfahren zusammen mit seinen Aufgaben, Merkmalen und Vorteilen am besten durch Bezugnahme auf die folgende genaue Beschreibung unter Hinzuziehung der begleitenden Figuren nachvollzogen werden, wobei:
  • 1 ein Flußdiagramm ist, das eine Ausführungsform einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand darstellt;
  • 2 ein Flußdiagramm ist, das eine Ausführungsform einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand darstellt;
  • 3 ein Zustandsdiagramm ist, das eine Ausführungsform einer Zustandsmaschine darstellt, die von einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand benutzt wird;
  • 4 eine Tabelle ist, die die möglichen Zustände einer Zustandsmaschine angibt, die in einer Ausführungsform einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand benutzt wird; und
  • 5 ein Blockdiagramm ist, das eine Ausführungsform einer Vorrichtung und eines Systems darstellt, die das Erwerben und Freigeben eines Lock gemäß dem offenbarten Gegenstand ermöglichen.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden genauen Beschreibung ist eine Anzahl von Details dargelegt, um ein genaues Verständnis des vorliegenden offenbarten Gegenstandes zu ermöglichen. Allerdings werden Fachleute verstehen, dass der offenbarte Gegenstand ohne diese spezifischen Details praktiziert werden kann. In anderen Fällen erfolgte keine Beschreibung allgemein bekannter Verfahren, Prozesse, Komponenten und Schaltkreise, um den offenbarten Gegenstand nicht unklar zu machen.
  • 1 ist ein Flußdiagramm, das eine Ausführungsform einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand darstellt. Block 110 zeigt, daß ein eine Anfrage stellender Thread oder mit dem Thread assoziierter Agent eine Aktion wählen kann, auf das Lock einzuwirken. In einer Ausführungsform kann die Aktion aus einer Gruppe von Aktionen ausgewählt werden, die Folgendes umfasst: Erwerben des Lockss, Versuch, ein Lock zu Erwerben, oder Freigeben des Lockss.
  • Block 120 zeigt, daß der aktuelle Status des Locks abgefragt werden kann. In einer Ausführungsform kann das Lock eine Zustandsmaschine mit vier gültigen Zuständen benutzen, wie zum Beisiel die in 3 gezeigte Zustandsmaschine.
  • 3 ist ein Zustandsdiagramm, das eine Ausführungsform einer Zustandsmaschine darstellt, die von einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand benutzt wird. Eine Ausführungsform der Zustandsmaschine kann vier gültige Zustände umfassen. Die Ausführungsform kann außerdem ein Lock umfassen, das einen Flagwert, einen Zeiger für einen ersten Thread in einer Warteschlange von Threads, die darauf warten, ein Lock zu erwerben, sowie einen Zeiger für einen letzten Thread in der Warteschlange zum Erwerben des Lockss enthält. In einer Ausführungsform kann der Flagwert zum einen anzeigen, ob das Lock gerade gehalten wird, und zum anderen, ob es eine Warteschlange von Threads gibt, die darauf warten, das Lock zu erwerben. In anderen Ausführungsformen kann der Flagwert nur anzeigen, ob das Lock gehalten wird, und ein anderer Wert kann anzeigen, ob eine Warteschlange exisitert. Es ist auch vorgesehen, daß die Existenz der Wartschlange vom ersten und vom letzten Thread-Zeiger bestimmt werden kann. Es ist außerdem vorgesehen, daß der „Zeiger" für die Threads ein Adresswert, ein einzigartiger Thread-Identifikator oder ein anderer Wert sein kann, der den Zugriff auf die Threads erleichtern würde. In den von 3 und 4 illustrierten Ausführungsformen kann der Zustand des Lockss durch den Flagwert und die Thread-Zeiger bestimmt werden; allerdings sind andere Techniken zum Bestimmen des Lockszustands vorgesehen.
  • Zustand 310 kann anzeigen, daß kein Thread das Lock hält und daß keine Threads in einer Warteschlange darauf warten, das Lock zu Erwerben. In der illustrierten Ausführungsform können der Flagwert, der erste Thread-Zeiger und der letzte Thread-Zeiger alle auf null eingestellt werden. Allerdings ist vorgesehen, daß in anderen Ausführungsformen andere Werte benutzt werden, um diesen nicht gehaltenen Zustand anzuzeigen. In dieser Ausführungsform kann Zustand 310 der Ausgangszustand des Locks sein. Auch kann in dieser Ausführungsform das Lock nicht freigegeben werden, da es nicht gehalten wird. In einer Ausführungsform kann ein Versuch, das Lock freizugeben, zu einem Fehler führen. Außerdem kann in dieser Ausführungsform das Lock nur erworben werden (über entweder eine Erwerbe- oder Versuchsaktion). Der Akt des Erwerbens des Locks kann das Lock in Zustand 320 bringen. Allerdings sind andere Ausführungsformen vorgesehen.
  • Zustand 320 kann anzeigen, daß ein Thread das Lock hält und keine Threads in der Warteschlange warten. In der dargestellten Ausführungsform kann der Flagwert auf eins gesetzt sein, und der erste und der letzte Thread-Zeiger können auf null gesetzt sein. Es ist jedoch vorgesehen, daß in anderen Ausführungsformen andere Werte benutzt werden, um diesen gehaltenen Zustand wiederzugeben. In dieser Ausführungsform kann das Lock, wenn es freigegeben wird, zu Zustand 310 zurückkehren. Wenn, ebenfalls in dieser Ausführungsform, das Lock erworben wird, kann das Lock auf Zustand 330 übergehen. Allerdings sind andere Ausführungsformen vorgesehen.
  • Zustand 330 kann anzeigen, daß ein Thread das Lock hält und ein Thread in der Warteschlange wartet. In der dargestellten Ausführungsform kann der Flagwert auf zwei gesetzt sein, und der erste und der letzte Thread-Zeiger können auf denselben Thread zeigen. Dieser Thread ist in 3 und 4 mit „K" dargestellt, was für den Thread am Kopf der Warteschlange steht. Allerdings ist vorgesehen, daß in anderen Ausführungsformen andere Werte benutzt werden, um diesen Zustand anzuzeigen. In dieser Ausführungsform kann das Lock, wenn es freigegeben wird, zu Zustand 320 zurückkehren. Wenn, ebenfalls in dieser Ausführungsform, das Lock erworben wird, kann das Lock zu Zustand 340 übergehen. Allerdings sind andere Ausführungsformen vorgesehen.
  • Zustand 340 kann anzeigen, daß ein Thread das Lock hält und daß mehr als ein Thread in der Warteschlange wartet. In der dargestellten Ausführungsform kann der Flagwert auf zwei gesetzt sein, und der erste und der letzte Thread-Zeiger können auf verschiedene Threads zeigen. Der letzte Thread ist in 3 und 4 mit „E" dargestellt, was für den Thread am Ende der Warteschlange steht. Allerdings ist vorgesehen, daß in anderen Ausführungsformen andere Werte benutzt werden, um diesen Zustand anzuzeigen. In dieser Ausführungsform kann das Lock, wenn es freigegeben wird, zu Zustand 330 zurückkehren oder in Zustand 340 verbleiben, je nach dem, ob das Freigeben des Locks die Warteschlangenlänge auf eins verändert oder nicht. Wenn, ebenfalls in dieser Ausführungsform, das Lock erworben wird, kann das Lock in Zustand 340 verbleiben. Es ist vorgesehen, daß, wenn das Lock nach einer Freigabe- oder Erwerbsaktion in Zustand 340 verbleibt, entweder der erste oder der letzte Thread-Zeiger verändert werden, um die durchgeführte Aktion anzuzeigen. Allerdings sind andere Ausführungsformen vorgesehen.
  • 4 ist eine Tabelle, die die möglichen Zustände einer Zustandsmaschine angibt, die in einer Ausführungsform einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand benutzt wird. Sie bietet eine Zusammenfassung der Zustandsmaschine aus 3. Reihe 410 fasst Zustand 310 zusammen. Reihe 420 fasst Zustand 320 zusammen. Reihe 430 fasst Zustand 330 zusammen. Reihe 440 faßt Zustand 340 zusammen. Allerdings illustrieren 3 und 4 lediglich eine Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • Zu 1 zurückkehrernd, stellt Block 130 dar, daß, sobald der aktuelle Zustand des Locks bestimmt wurde, der nächste Zustand des Locks in Block 120 spekulativ bestimmt werden kann. In einem erläuternden Beispiel kann der Thread eine Anfrage auf Erwerb des Locks stellen. Der aktuelle Zustand des Locks kann zeigen, daß das Lock gegenwärtig nicht gehalten ist. Aus diesem Grund kann, nachdem die abgefragte „Erwerbs"-Aktion durchgeführt wurde, unter Benutzung der Ausführungsform der Zustandsmaschine, die durch 3 illustriert ist, der nächste Zustand des Locks als ein Zustand bestimmt werden, der anzeigt, daß das Lock gehalten ist, aber keine Threads in einer Warteschlange darauf warten, das Lock zu erwerben.
  • Block 140 stellt dar, daß ein Versuch vorgenommen werden kann, das Lock in den nächsten Zustand übergehen zu lassen. Es ist vorgesehen, daß diese und möglicherweise jede Änderung des Lockszustands mit Hilfe einer Technik erfolgen kann, die versucht, das Auftreten von Wettlaufsituationen und anderen unerwünschten Effekten im Zusammenhang mit Threads zu minimieren. Eine Wettlaufsituation wird oft definiert als unerwünschte Situation, die eintritt, wenn eine Vorrichtung oder ein System versuchen, zwei oder mehr Operationen im wesentlichen gleichzeitig durchzuführen, wobei jedoch aufgrund der Natur der Vorrichtung oder des Systems die Operationen in einer korrekten Reihenfolge erfolgen müssen, um richtig ausfgeführt zu werden. In einer Ausführungsform kann die Änderung durch eine „Vergleich-und-Speicher"-Operation (auch bekannt als „Test-und-Set"-Operation) durchgeführt werden, die bestätigt, daß eine Variable einem erwarteten Wert entspricht, bevor zugelassen wird, daß die Variable auf einen neuen Wert gesetzt wird. Dies sind jedoch lediglich einige nicht eingrenzende Beispiele, durch die der offenbarte Gegenstand nicht eingegrenzt ist.
  • Block 150 zeigt, daß der Zustandsübergang in einigen Ausführungsformen erfolglos sein kann. Es ist vorgesehen, daß sich in einer Ausführungsform der Lockzustand zwischen Block 120 und Block 140 verändern kann. Es ist außerdem vorgesehen, daß der Thread oder Durchführer einer Technik sich dieser Änderung nicht bewußt sein könnte, bevor ein Übergang versucht wird. In einem erläuternden Beispiel kann ein zweiter Thread den Zustand des Locks zwischen den Blöcken 120 und 140 ändern. Dies kann dazu führen, daß der versuchte Zustandsübergang fehlschlägt. Es ist vorgesehen, daß der Übergang fehlschlagen kann, wenn beispielsweise eine solche Änderung aufgetreten ist. Allerdings sind auch andere mögliche Fehlschläge vorgesehen.
  • Block 160 zeigt, daß dann, wenn der Zustandsübergang von Block 140 fehlschlägt, die gewählte Aktion überprüft wird. Die gewählte oder abgefragte Aktion von Block 110 kann in einer Ausführungsform sein: Versuch des Erwerbs des Lockss, Erwerb des Locks, oder Freigabe des Lockss. Allerdings fallen auch andere Aktionen in den Umfang des offenbarten Gegenstands.
  • Block 170 zeigt, daß in einer Ausführungsform dann, wenn es sich bei der gewählten Aktion lediglich darum handelte, das Lock zu erwerben und der Zustandsübergang fehlschlug, die Technik dem die Anfrage stellenden Thread anzeigen kann, daß das Lock nicht erworben wurde. In einer Ausführungsform illustriert 1 umgekehrt, daß dann, wenn die gewählte Aktion „Erwerb" oder „Freigabe" war, die Technik die Blöcke 120, 130 und 140 wiederholen kann, bis das Lock erfolgreich in den Zustand gewechselt hat.
  • 2 ist ein Flußdiagramm, das eine Ausführungsform einer Technik zum Erwerben und/oder Freigeben eines Locks gemäß dem offenbarten Gegenstand darstellt. 2 ist eine Erweiterung von 1, die eine Ausführungsform einer Technik genauer dargstellt, die eingesetzt werden kann, wenn der Zustandsübergang von Block 140 aus 1 erfolgreich ist.
  • Block 210 aus 2 zeigt, daß je nach der gewählten Aktion verschiedene Vorfälle eintreten können (siehe Block 110 aus 1). Wenn die gewählte Aktion „Erwerb" oder „Versuch" war, zeigt Block 220, daß verschiedene Aktionen durchgeführt werden können, abhängig davon, ob das Lock erworben wurde oder nicht. In einer beispielhaften Ausführungsform kann der Erwerb des Locks synonym sein mit dem Übergang des Locks in Zustand 310 von 3. Allerdings ist dies lediglich eine beispielhafte Ausführungsform, und es sind andere Ausführungsformen vorgesehen.
  • Block 230 zeigt, daß, wenn das Lock erworben wurde, dem Thread angezeigt werden kann, daß das Lock erworben wurde. In einer Ausführungsform kann diese Anzeige das Deselektieren (oder das Setzen in einen „falschen" Zustand) eines Spin Flag im Thread sein. Das Spin Flag kann die Ausführung des Thread verhindert haben, während dieser auf den Erwerb des Locks wartete. Allerdings ist vorgesehen, daß andere Formen der Anzeige möglich sind und daß dies lediglich ein erläuterndes Beispiel ist. Es ist außerdem vorgesehen, daß die Anzeige nur in bestimmten Ausführungsformen des offenbarten Gegenstands erfolgt.
  • Block 250 zeigt, daß dann, wenn das Lock nicht erworben wurde und die gewählte Aktion „Erwerb" war, der Thread, der das Lock abfragt, einer Warteschlange von Threads hinzugefügt werden kann, die darauf warten, das Lock zu erwerben. In einer Ausführungsform kann der Thread einfach zum Ende der Warteschlange hinzugefügt werden. Allerdings ist vorgesehen, daß andere Muster zur Priorisierung des Lockzugriffs benutzt werden können.
  • In einer beispielhaften Ausführungsform kann der hinzugefügte Thread der erste und einzige Thread in der Warteschlange sein. Beispielsweise kann das Lock aus Zustand 320 von 3 in Zustand 330 übergegangen sein. In diesem Fall kann das Hinzufügen des Threads zur Warteschlange umfassen, daß der Flagwert des Locks auf zwei gesetzt wird und ein Zeiger (oder ein anderer Wert zur Erleichterung des Zugriffs) für den Thread im ersten und im letzten Zeigerwert des Locks gesetzt wird. Allerdings ist dies lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • In einer zweiten beispielhaften Ausführungsform kann der hinzugefügte Thread der zweite Thread in der Warteschlange sein. Beispielsweise kann das Lock aus Zustand 330 in Zustand 340 übergegangen sein. In diesem Fall kann das Hinzufügen des Threads zur Warteschlange umfassen, daß der Flagwert oder der erste Thread-Zeiger des Locks nicht geändert wird und ein Zeiger (oder ein anderer Wert zur Erleichterung des Zugriffs) für den Thread im letzten Zeigerwert des Locks gesetzt wird. Allerdings ist dies lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • In einer dritten beispielhaften Ausführungsform kann der hinzugefügte Thread der dritte oder höhere Thread in der Warteschlange sein. Beispielsweise kann das Lock aus einem vorherigen Zustand 340 in einen neuen Zustand 340 übergegangen sein. In diesem Fall kann das Hinzufügen des Threads zur Warteschlange umfassen, daß der Flagwert oder der erste Thread-Zeiger des Locks nicht geändert wird, sondern ein Zeiger (oder ein anderer Wert zur Erleichterung des Zugriffs) für den Thread im letzten Zeigerwert des Locks gesetzt wird. Dieser neue letzte (oder „End"-) Thread-Zeiger würden den vorherigen letzten Thread-Zeiger ersetzen. Allerdings ist dies lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • Block 255 aus 2 zeigt, daß der nun in die Warteschlange eingereihte Thread darauf warten kann, eine Nachricht zu erhalten, daß das Lock erworben wurde. Es ist vorgesehen, daß der Thread in einer Ausführungsform auf eine Nachricht warten kann, daß das Lock für den Erwerb zur Verfügung steht. In einer Ausführungsform kann der Thread davon abgehalten werden, während des Wartens auszuführen. In einer anderen Ausführungsform kann der Thread fortfahren, einen Teil des Threads auszuführen, der keinen Zugriff auf die vom Lock kontrollierte Ressource benötigt oder wünscht.
  • Block 260 zeigt, daß dann, wenn die gewählte Aktion die Freigabe des Locks war, die Anzahl der Threads oder, in einer anderen Ausführungsform, die Existenz einer Warteschlange von Threads, die darauf warten, das Lock zu erwerben, bestimmt werden kann. In einer Ausführungsform kann die annähernde Größe der Warteschlange mit Hilfe eines Flagwerts bestimmt werden, der mit dem Lock assoziiert ist. In einer anderen Ausführungsform kann die Existenz oder Tiefe der Warteschlange bestimmt werden, indem der erste und der letzte in der Warteschlange eingereihte Thread-Zeiger verglichen werden. Dies sind jedoch lediglich erläuternde Beispiele, und es ist vorgesehen, daß andere Muster zum Bestimmen der Existenz oder Tiefe einer Warteschlange benutzt werden können.
  • Block 270 zeigt, daß das Lock freigegeben werden kann, wenn keine Warteschlange existiert. In einer Ausführungsform, die in 3 dargestellt ist, kann dies umfassen, daß das Lock aus Zustand 320 in Zustand 310 übergeht. In dieser Ausführungsform kann Block 270 aus 2 synonym mit Block 140 aus 1 sein. Allerdings ist vorgesehen, daß andere Ausführungsformen einen stärker beteiligten Freigabemechanismus umfassen, wie zum Beispiel einen vorbestimmten Rückkehrwert oder einen zentralen Zustandsmechanismus. Dies sind lediglich einige nicht eingrenzende Ausführungsformen.
  • Block 280 aus 2 zeigt, daß dann, wenn eine Warteschlange existiert, der erste Thread in der Warteschlange identiziert werden oder auf ihn zugegriffen werden kann. In einer Ausführungsform kann dies umfassen, daß der Zeigerwert benutzt wird, der mit dem ersten Thread-Zeiger des Locks assoziiert ist. Allerdings ist dies lediglich eine beispielhafte Ausführungsform, und es sind andere Ausführungsformen vorgesehen.
  • Block 283 zeigt, daß der erste Thread aus der Warteschlange entfernt werden kann. In einer Ausführungsform kann dies umfassen, daß sowohl der Zustand des Locks und der aus der Warteschlange entfernte Thread geändert werden. Allerdings sind andere Muster zum Entfernen des Threads vorgesehen. Im Folgenden sollen drei hochspezifische Ausführungsformen beschrieben werden; dies sind jedoch lediglich einige nicht eingrenzende Beispiele.
  • In einer beispielhaften Ausführungsform kann der aus der Warteschlange entfernte Thread der erste und einzige Thread in der Warteschlange sein. Beispielsweise kann das Lock aus Zustand 330 von 3 in Zustand 320 übergehen. In diesem Fall kann das Entfernen des Threads aus der Warteschlange umfassen, daß der Flagwert auf eins gesetzt wird und daß der erste und der letzte Thread-Zeigerwert auf null gesetzt werden. Dies ist jedoch lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • In einer zweiten beispielhaften Ausführungsform kann die Warteschlange nur zwei Threads enthalten. Beispielsweise kann das Lock aus Zustand 340 in Zustand 330 übergehen. In diesem Fall kann das Entfernen des Threads aus der Warteschlange umfassen, daß der Flagwert oder der letzte Thread-Zeiger des Locks nicht geändert wird, während ein Zeiger (oder ein anderer Wert zur Erleichterung des Zugriffs) für den zweiten in der Warteschlange aufgereihten Thread im ersten Thread-Zeigerwert des Locks gesetzt wird. In einer Ausführungsform kann der erste Thread einen Wert „nächster Thread" umfassen, der einen Zeiger für den nächsten Thread in der Warteschlang umfasst. Auf diesen nächsten Threadwert kann zugegriffen werden, um den richtigen Wert zum Setzen des neuen ersten Thread-Zeigers im Lock zu bestimmen. Dies ist jedoch lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • In einer dritten beispielhaften Ausführungsform kann die Warteschlange mehr als zwei Threads enthalten. Beispielsweise kann das Lock aus einem vorherigen Zustand 340 in einen neuen Zustand 340 übergehen. In dieser Ausführungsform können die Aktionen identischen mit denen der zweiten beispielhaften Ausführungsform sein. Als als bei der zweiten Ausführungsform, wobei der erste und der letzte Thread-Zeiger zuletzt in Zustand 330 denselben Wert enthielten, würde es bei dieser Ausführungsform dazu kommen, daß der erste und der letzte Thread-Zeiger in Zustand 340 unterschiedliche Werte enthalten. Dies ist jedoch lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen.
  • Block 286 aus 2 zeigt, daß der aus der Warteschlange entfernte Thread davon unterrichtet werden kann, daß er das Lock erworben hat. In einer Ausführungsform kann diese Anzeige umfassen, daß ein Spin Flag im Thread deselektiert (oder in den „falschen" Zustand gebracht) wird. Dieses Spin Flag kann die Ausführung des Thread verhindert haben, während er auf den Erwerb des Locks gewartet hat. Allerdings ist vorgesehen, daß andere Formen der Anzeige möglich sind und daß dies lediglich ein erläuterndes Beispiel ist. Es ist außerdem vorgesehen, daß die Anzeige nur in bestimmten Ausführungsformen des offenbarten Gegenstands erfolgt.
  • Es ist außerdem vorgesehen, daß in einer Ausführungsform einige oder sogar alle der in 4 gezeigten Aktionen als Teil der Blöcke 140 und 150 aus 1 enthalten sein können. In dieser Ausführungsform können die Blöcke 140 und 150 als eine atomische Aktion durchgeführt werden, wie zum Beispiel eine „Vergleich-und-Speicher"-Operation (auch bekannt als „Test-und-Set"-Operation), die bestätigt, daß eine Variable einem erwarteten Wert entspricht, bevor die Variable auf einen neuen Wert verändert wird.
  • 5 ist ein Blockdiagramm, das eine Ausführungsform einer Vorrichtung 501 und eines Systems 500 illustriert, die den Erwerb und die Freigabe eines Lock 510 gemäß dem offenbarten Gegenstand ermöglichen. In einer Ausführungsform kann das Lock 510 einen Zustandswert 520 enthalten. Der Zustandswert kann einen Flagwert 523 enthalten, der anzeigt, ob das Lock gegenwärtig gehalten wird oder nicht und/oder die ungefährte Länge einer Warteschlange von Threads 550, die darauf warten, das Lock zu erwerben, anzeigt, einen ersten Thread-Wert 525, um Zugriff auf einen ersten Thread 560 zu erleichtern, und/oder einen letzten Thread-Wert 528, um Zugriff auf einen letzten Thread 580 zu erleichtern.
  • In einer Ausführungsform kann das System 500 eine Warteschlange von Threads 550 enthalten, die darauf warten, das Lock 510 zu erwerben. Während 5 eine Warteschlange zeigt, die wenigstens vier Threads aufweist, fällt eine Warteschlange mit null oder mehr Threads in den Umfang des offenbarten Gegenstands. Die Warteschlange kann einen ersten Thread 560, einen letzten Thread 580, einen zweiten Thread 570 und mehrere andere Threads 590 enthalten. In einer Ausführungsform, beispielsweise dann, wenn die Warteschlange nur einen Thread enthält, können der erste und der letzte Thread identisch sein. In einer Ausführungsform kann jeder Thread in der Warteschlange einen Wartewert 593 enthalten, der anzeigt, daß der Thread darauf wartet, das Lock zu erwerben, und/oder der einen nächsten Thread-Wert 597 anzeigt, der Zugriff auf den nächsten Thread in der Warteschlange erleichtert. Allerdings ist vorgesehen, daß andere Zustands- und Speicherstrukturen von den Threads benutzt werden können.
  • In einer Ausführungsform können die Vorrichtung 501 und das System 500 einen Lock-Erwerber 530 enthalten, um den Erwerb des Locks 510 zu erleichtern. In einer Ausführungsform kann der Lock-Erwerber dazu in der Lage sein, alle oder einen Teil der in 1 und 2 dargestellten und oben beschriebenen Techniken durchzuführen. In einem anderen Beispiel kann der Lock-Erwerber dazu in der Lage sein, zu bestimmen, ob das Lock gehalten wird. Wenn dies der Fall ist, kann der Lock-Erwerber einen Anfragethread in der Warteschlange 550 anordnen. Es ist vorgesehen, daß der Anfragethread am Ende der Warteschlange angeordnet wird, oder am Anfang oder in der Mitte der Warteschlange, falls ein Priorisierungsmuster benutzt wird. Allerdings sind dies lediglich einige nicht eingrenzende Beispiele für Ausführungsformen innerhalb des Umfangs des offenbarten Gegenstands.
  • In einer Ausführungsform können die Vorrichtung 501 und das System 500 einen Lock-Freigeber 540 enthalten, um die Freigabe des Locks 510 zu erleichtern. In einer Ausführungsform kann der Lock-Freigeber alle oder einen Teil der in 1 und 2 dargestellten und oben beschriebenen Techniken durchzuführen. In einem anderen Beispiel kann der Lock-Freigeber dazu in der Lage sein, zu bestimmen, ob eine Warteschlange 550 existiert oder nicht. Wenn eine Warteschlange existiert, kann der Lock-Freigeber den ersten Thread 560 aus der Warteschlange entfernen und den zweiten Thread 570 auf die erste Position in der Warteschlange bewegen. Der Lock-Freigeber kann dann den ersten Thread 560 davon unterrichten, daß das Lock zur Verfügung steht. Es ist vorgesehen, daß in einer Ausführungsform der Lock-Freigeber den nächsten Thread-Wert 597 dazu benutzt, auf den zweiten Thread zuzugreifen, und den Wartewert 593, um den ersten Thread davon zu unterrichten, daß das Lock zur Verfügung steht. Allerdings sind dies lediglich einige nicht eingrenzende Beispiele für Ausführungsformen innerhalb des Umfangs des offenbarten Gegenstands.
  • In einer Ausführungsform können die Vorrichtung 501 und das System 500 dazu in der Lage sein, die dynamische Speicherzuweisung und -freigabe auf eine Anzahl zu begrenzen, die im wesentlichen mit der Summe der Anzahl der Locks in Beziehung steht oder zu dieser proportional ist. Es ist des weiteren vorgesehen, daß die Änderungen des Lockzustands 520 oder der Thread-Werte 593 und 597 mit Hilfe einer Technik erfolgen können, die versucht, das Auftreten von Wettlaufsituationen und anderen unerwünschten Effekten im Zusammenhang mit Threads zu minimieren. In einer Ausführungsform kann die Änderung durch eine „Vergleich-und-Speicher"-Operation (auch bekannt als „Test-und-Set"-Operation) durchgeführt werden, die bestätigt, daß eine Variable einem erwarteten Wert entspricht, bevor zugelassen wird, daß die Variable auf einen neuen Wert gesetzt wird. Es ist außerdem vorgesehen, daß ein Wartewert 593 eines Thread und ein nächster Thread-Wert 597 in einem Speicher und in separaten Cache-Lines dieses Speichers gespeichert werden. In einer anderen Ausführungsform können der Warteschlangenlängenwert 524 und der letzte Thread-Wert 528 eines Locks in derselben Cache-Line eines Speichers gespeichert werden. Der erste Thread-Wert 525 eines Locks und eine duplizierte oder Schattenversion des letzten Thread-Werts können in einer zweiten Speicher-Cache-Line gespeichert werden. Allerdings sind dies lediglich einige spezifische Ausführungsformen des offenbarten Gegenstands, und es sind anderen Ausführungsformen möglich und vorgesehen.
  • Die hier beschriebenen Techniken sind nicht auf eine bestimmte Hardware- oder Software-Konfigurierung begrenzt; sie können in jeder Rechner- oder Prozessumgebung Anwendung finden. Die Techniken können in Hardware, Software, Firmware oder einer Kombination derselben realisiert sein. Die Techniken können in Programmen realisiert sein, die auf programmierbaren Maschinen wie tragbaren oder fest angeordneten Computern, persönlichen digitalen Hilfsgeräten und ähnlichen Vorrichtungen einschließlich einem Prozessor, einem für den Prozessor lesbaren oder zugänglichen Speichermedium (einschließlich flüchtige und nicht-flüchtige Speicher- und/oder Speicherungselemente), wengistens einer Eingabevorrichtung und einer oder mehr Ausgabevorrichtungen ausführen. Der Programmcode wird auf die Daten, die mit Hilfe der Eingabevorrichtung eingegeben werden, angewandt, um die beschriebenen Funktionen durchzuführen und Ausgabeinformation zu erzeugen. Die Ausgabeinformation kann auf eine oder mehrere Ausgabevorrichtungen angewandt werden.
  • Jedes Programm kann in einer prozess- oder objektorientierten Programmierhochsprache realisiert sein, um mit einem Verarbeitungssystem zu kommunizieren. Allerdings können Programme bei Bedarf auch in Assemblier- oder Maschinensprache realisiert sein. Die Sprache kann in jedem Fall kompiliert oder interpretiert werden.
  • Jedes solche Programm kann auf einem Speichermedium oder einer Speichervorrichtung gespeichert sein, z. B. einer CD-ROM (compact read only memory), einer DVD (digital versatile disk), einer Festplatte, Firmware, einem nicht-flüchtigem Speicher, einer Magnetscheibe oder einem ähnlichem Medium oder einer ähnlichen Vorrichtung, das oder die von allgemeinen oder spezialisierten programmierbaren Maschinen lesbar ist, um die Maschine zu konfigurieren und zu betreiben, wenn das Speichermedium oder die Speichervorrichtung vom Computer gelesen wird, um die hier beschriebenen Prozesse auszuführen. Es kann auch vorgesehen sein, das System als maschinenlesbares oder -zugängliches Speichermedium zu realsieren, das mit einem Programm konfiguriert ist, wobei das so konfigurierte Speichermedium eine Maschine dazu veranlasst, in einer bestimmmten Weise zu arbeiten. Andere Ausführungsformen fallen in den Umfang der folgenden Ansprüche.
  • Während bestimmte Merkmale des offenbarten Gegenstands hier dargestellt und beschrieben wurden, werden Fachleuten nun viele Modifikationen, Ersetzungen, Veränderungen und Äquivalente in den Sinn kommen. Es versteht sich deshalb, daß die beiliegenden Ansprüche alle solchen Modifikationen und Veränderungen abdecken sollen, die in den wahren Umfang des offenbarten Gegenstands fallen.
  • ZUSAMMENFASSUNG
  • Die vorliegende Offenbarung betrifft das Erwerben und Freigeben einer geteilten Ressource über ein Lock-Semaphor, und insbesondere das Erwerben und Freigeben einer geteilten Ressource über ein Lock-Semaphor, das eine Zustandsmaschine benutzt.

Claims (55)

  1. Verfahren zum Verwalten eines von einem Thread benutzten Locks, das folgendes umfasst: – Wählen einer Aktion, um auf das Lock einzuwirken, wobei die Aktion aus einer Gruppe ausgewählt wird, die umfasst: – Erwerben des Locks; – Versuchen, das Lock zu erwerben; und – Freigeben des Locks; – asynchrones Abfragen des aktuellen Zustands des Locks, das einen Mehrwertzustand aufweist; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  2. Verfahren nach Anspruch 1, das außerdem ein Wiederholen, bis der Zustandsübergang erfolgreich ist, der folgenden Schritte umfasst, wenn der Übergang fehlschlägt und wenn die gewählte Aktion entweder das Erwerben oder das Freigeben des Locks war,: – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; – Versuchen, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  3. Verfahren nach Anspruch 2, das außerdem ein Anzeigen des Erwerbs des Locks umfasst, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist und – der spekulativ bestimmte nächste Zustand den Erwerb des Locks darstellt.
  4. Verfahren nach Anspruch 3, das außerdem – Hinzufügen des Thread an das Ende einer Warteschlange von Threads, die darauf warten, das Lock zu erwerben, – Warten auf Erhalt einer Benachrichtigung, daß der Thread das Lock erwerben kann; und – Anzeigen des Erwerbs des Locks, umfaßt, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist und – der spekulativ bestimmte nächste Zustand nicht den Erwerb des Locks darstellt.
  5. Verfahren nach Anspruch 2, das außerdem ein Bestimmen der Anzahl von Threads in einer Warteschlange zum Erwerben des Locks mit Hilfe des spekulativ bestimmten nächsten Zustands des Locks umfasst, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Freigeben des Locks ist.
  6. Verfahren nach Anspruch 5, das außerdem umfasst, wenn die Warteschlange wenigstens einen ersten Thread enthält, – Entfernen des ersten Thread aus der Warteschlange; und – Benachrichtigen des ersten Thread, daß der erste Thread das Lock erworben hat.
  7. Verfahren nach Anspruch 1, das außerdem ein Anzeigen, daß das Lock nicht erworben werden konnte, umfasst, wenn – die gewählte Aktion das Versuchen, das Lock zu erwerben, ist und – der Zustandsübergang fehlschlägt.
  8. Verfahren nach Anspruch 1, das außerdem ein Anzeigen des Erwerbs des Locks umfasst, wenn – der Zustandsübergang erfolgreich ist und – die gewählte Aktion das Versuchen, das Lock zu erwerben, ist.
  9. Verfahren nach Anspruch 1, das außerdem ein Anzeigen des Erwerbs des Locks umfasst, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand den Erwerb des Locks darstellt.
  10. Verfahren nach Anspruch 9, das außerdem – ein Hinzufügen des Threads an das Ende einer Warteschlange von Threads, die darauf warten, das Lock zu erwerben; – ein Warten auf den Erhalt einer Benachrichtigung, daß der Thread das Lock erwerben kann; und – ein Anzeigen des Erwerbs des Locks umfasst, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand nicht den Erwerb des Locks darstellt.
  11. Verfahren nach Anspruch 1, das außerdem ein Bestimmen der Anzahl von Threads in einer Warteschlange zum Erwerben des Locks mit Hilfe des spekulativ bestimmten nächsten Status des Locks.umfasst, wenn – der Zustandsübergang erfolgreich ist, und – die gewählte Aktion das Freigeben des Locks ist.
  12. Verfahren nach Anspruch 11, das außerdem umfasst, wenn die Warteschlange wenigstens einen ersten Thread enthält: – ein Entfernen des ersten Threads aus der Warteschlange; und – ein Benachrichtigen des ersten Threads, daß der erste Thread das Lock erhalten hat.
  13. Verfahren nach Anspruch 1, wobei der Thread folgendes umfasst: einen eindeutigen Thread-Identifikator; ein nächstes Thread-Feld, um den Zugriff auf den nächsten Thread in einer Warteschlange von Threads, die darauf warten, das Lock zu erwerben, erleichtert; und daß der Thread nur in der Lage dazu ist, auf ein einziges Lock zugleich zu warten.
  14. Verfahren nach Anspruch 1, wobei die Aktion des Erwerbens des Locks umfasst, nicht in der Lage zu einem Time-Out oder einem Fehlschlagen des Erwerbens des Locks zu sein.
  15. Verfahren nach Anspruch 1, wobei der aktuelle Zustand des Locks wechseln kann zwischen einem asynchronem Abfragen des aktuellen Zustands des Locks; und einem Versuchen, das Lock aus dem abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  16. Vorrichtung, die folgendes umfasst: – ein Lock mit einem Mehrzustandswert, das folgendes aufweist: – einen Flagwert, einen ersten Thread-Wert und einen letzten Threadwert; und – einen Lock-Erwerber, der in der Lage dazu ist, den Erwerb des Locks durchzuführen durch – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock aus dem abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  17. Vorrichtung nach Anspruch 16, wobei der Lock-Erwerber außerdem dazu in der Lage ist, zwei allgemeine Aktionen durchzuführen, einschließlich Erwerben des Locks, Versuchen, das Lock zu erwerben; und wobei, wenn der Zustandsübergang fehlschlägt und die allgemeine Aktion das Erwerben des Locks ist, der Lock-Erwerber außerdem dazu in der Lage ist, golgende Schritte zu wiederholen, bis der Zustandsübergang erfolgreich ist: – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock aus dem abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  18. Vorrichtung nach Anspruch 17, wobei, wenn der Zustandsübergang fehlschlägt und die allgemeine Aktion das Versuchen, das Lock zu erwerben, ist, der Lock-Erwerber außerdem in der Lage ist anzuzeigen, daß das Lock nicht erworben werden konnte.
  19. Vorrichtung nach Anspruch 17, wobei, wenn der Zustandsübergang fehlschlägt und die allgemeine Aktion das Versuchen, das Lock zu erwerben, ist, der Lock-Erwerber außerdem in der Lage ist anzuzeigen, daß das Lock erworben worden ist.
  20. Vorrichtung nach Anspruch 16, wobei der Lock-Erwerber außerdem in der Lage ist, anzuzeigen, daß das Lock erworben worden ist, wenn – der Zustandsübergang erfolgreich ist, – die allgemeine Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand den Erwerb des Locks darstellt.
  21. Vorrichtung nach Anspruch 20, wobei der Lock-Erwerber außerdem in der Lage ist, wenn – dem Thread an das Ende einer Warteschlange von Threads hinzuzufügen, die darauf warten, das Lock zu erwerben; – auf den Erhalt einer Benachrichtigung, daß der Thread das Lock erwerben kann, zu warten; und – den Erwerb des Locks anzuzeigen, wenn – der Zustandsübergang fehlschlägt, – die allgemeine Aktion das Erwerben des Locks ist, und – der spekulativ besitmmte nächste Zustand nicht den Erwerb des Locks darstellt.
  22. Vorrichtung nach Anspruch 22, wobei der Lock-Erwerber nicht zu einem Time-Out oder einem Fehlschlagen in der Lage ist, wenn die gewählte allgemeine Aktion das Erwerben des Locks ist.
  23. Vorrichtung, die folgendes umfasst: – ein Lock mit einem Mehrzustandswert, das folgendes aufweist: einen Flagwert, einen ersten Thread-Wert und einen letzten Threadwert; und – einen Lock-Freigeber, der dazu in der Lage ist, eine Sperre des Locks freizugeben durch – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock aus dem abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  24. Vorrichtung nach Anspruch 23, wobei, wenn der Zustandsübergang fehlschlägt, der Lock-Freigeber außerdem dazu in der Lage ist, die folgenden Schritte zu wiederholen, bis der Zustandsübergang erfolgreich ist: – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock aus dem abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  25. Vorrichtung nach Anspruch 23, wobei, wenn der Zustandsübergang erfolgreich ist, der Lock-Freigeber außerdem mit Hilfe des spekulativ bestimmten nächsten Zustands des Locks dazu in der Lage ist, die Anzahl von Threads in einer Warteschlange von Threads zu bestimmen, die darauf warten, das Lock zu erwerben.
  26. Vorrichtung nach Anspruch 25, wobei, wenn die Warteschlange wenigstens einen ersten Thread aufweist, der Lock-Freigeber außerdem dazu in der Lage ist: – den ersten Thread aus der Warteschlange zu entfernen; und – den ersten Thread zu benachrichtigen, daß der erste Thread das Lock erhalten hat.
  27. Vorrichtung nach Anspruch 26, wobei der Lock-Freigeber dazu in der Lage ist, den ersten Thread aus der Warteschlange mit Hilfe eines Threads zu entfernen, der folgendes aufweist: – einen einduetigen Thread-Identifikator; und – einen nächsten Thread-Wert, um den Zugriff auf den nächsten Thread in der Warteschlange zu erleichtern.
  28. Vorrichtung nach Anspruch 23, wobei das Lock dazu in der Lage ist, den Zustand während der Zeit zu ändern, während der der Lock-Freigeber – asynchron den aktuellen Zustand des Locks abfragt; und – versucht, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  29. Artikel, der folgendes umfasst: – ein Speichermedium mit mehreren maschinenzugänglichen Befehlen, wobei, wenn die Befehle ausgeführt werden, die Befehle vorsehen: – Wählen einer Aktion zum Einwirken auf ein Lock, das von einem Thread benutzt wird, wobei die Aktion aus einer Gruppe ausgewählt wird, die umfasst: – Erwerben des Locks; – Versuchen, das Lock zu erwerben; und – Freigeben des Locks; – asynchrones Abfragen des aktuellen Zustands des Locks, das einen Mehrwertzustand aufweist; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  30. Artikel nach Anspruch 29, der außerdem Befehle umfasst, die vorsehen, wenn der Zustandsübergang fehlschlägt und wenn die gewählte Aktion entweder das Erwerben oder das Freigeben des Locks war, die folgenden Schritte zu wiederholen, bis der Zustandsübergang erfolgreich ist: – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; – Versuchen, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  31. Artikel nach Anspruch 30, der außerdem Befehle umfasst, die ein Anzeigen des Erwerbs des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand den Erwerb des Locks darstellt.
  32. Artikel nach Anspruch 31, der außerdem Befehle umfasst, die – ein Hinzufügen des Threads an das Ende einer Warteschlange von Threads, die darauf warten, das Lock zu erwerben; – ein Warten auf den Erhalt einer Benachrichtigung, daß der Thread das Lock erwerben kann; und – ein Anzeigen des Erwerbs des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand nicht den Erwerb des Locks darstellt.
  33. Artikel nach Anspruch 30, der außerdem Befehle umfasst, die ein Bestimmen der Anzahl der Threads in einer Warteschlange zum Erwerben des Locks mit Hilfe des spekulativ bestimmten nächsten Zustands des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Freigeben des Locks ist.
  34. Artikel nach Anspruch 33, der außerdem Befehle umfasst, die – Entfernen des ersten Threads aus der Warteschlange; und – Benachrichtigen des ersten Threads, daß der erste Thread das Lock erworben hat vorsehen, wenn die Warteschlange wenigstens einen ersten Thread aufweist.
  35. Artikel nach Anspruch 29, der außerdem Befehle umfasst, die ein Anzeigen, daß das Lock nicht erworben werden konnte vorsehen, wenn – die gewählte Aktion das Versuchen, das Lock zu erwerben ist, und – der Zustandsübergang fehlschlägt.
  36. Artikel nach Anspruch 29, der außerdem Befehle umfasst, die ein Anzeigen des Erwerbs des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist und – die gewählte Aktion das Versuchen, das Lock zu erwerben ist.
  37. Artikel nach Anspruch 29, der außerdem Befehle umfasst, die ein Anzeigen des Erwerbs des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand den Erwerb des Locks darstellt.
  38. Artikel nach Anspruch 37, der außerdem Befehle umfasst, die – ein Hinzufügen des Threads an das Ende einer Warteschlange von Threads, die darauf warten, das Lock zu erwerben; – ein Warten auf den Erhalt einer Benachrichtigung, daß der Thread das Lock erwerben kann; und – ein Anzeigen des Erwerbs des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand nicht den Erwerb des Locks darstellt.
  39. Artikel nach Anspruch 29, der außerdem Befehle umfasst, die ein Bestimmen der Anzahl von Threads in einer Warteschlange zum Erwerben des Locks mit Hilfe des spekulativ bestimmten nächsten Zustands des Locks vorsehen, wenn – der Zustandsübergang erfolgreich ist, – die gewählte Aktion das Freigeben des Locks ist.
  40. Artikel nach Anspruch 39, der außerdem Befehle umfasst, die – ein Entfernen des ersten Threads aus der Warteschlange; und – ein Benachrichtigen des ersten Threads, daß der erste Thread das Lock erworben hat vorsehen, wenn die Warteschlange wenigstens einen ersten Thread aufweist.
  41. Artikel nach Anspruch 29, wobei der Thread folgendes umfasst: – einen einzigartigen Thread-Identifikator; – ein nächstes Thread-Feld, um den Zugriff auf den nächsten Thread in einer Warteschlange von Threads zu erleichtern, die darauf warten, das Lock zu erwerben; und – daß der Thread nur in der Lage dazu ist, auf ein einziges Lock zugleich zu warten.
  42. Artikel nach Anspruch 29, wobei die Aktion des Erwerbens des Locks umfasst, nicht in der Lage zu einem Time-Out oder einem Fehlschlagen des Erwerbens des Locks zu sein.
  43. Artikel nach Anspruch 29, wobei der aktuelle Zustand des Locks wechseln kann zwischen einem asynchronem Abfragen des aktuellen Zustands des Locks; und einem Versuch, das Lock aus dem abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  44. System, das folgendes umfasst: – ein Speicherelement, das dazu in der Lage ist, eine Warteschlange von Threads zu speichern, wobei jeder Thread folgendes aufweist: – einen einzigartigen Thread-Identifikator und einen nächsten Thread-Wert, um den Zugriff auf den nächsten Thread in der Warteschlange zu erleichtern; – ein Lock mit einem Mehrzustandswert, das folgendes aufweist: – einen Flagwert, einen ersten Thread-Wert und einen letzten Thread-Wert; und – einen Lock-Erwerber, der dazu in der Lage ist, ein Erwerben des Locks durchzuführen durch – ein asynchrones Abfragen des aktuellen Zustands des Locks; – ein spekulatives Bestimmen des nächsten Zustands des Locks; und – ein Versuch, das Lock aus dem abgefragten Zustand in den spekulativ bestimmten Zustand übergehen zu lassen.
  45. System nach Anspruch 44, wobei der Lock-Erwerber außerdem dazu in der Lage ist, zwei allgemeine Aktionen durchzuführen, einschließlich Erwerben des Locks, Versuch, das Lock zu erwerben; und wobei, wenn der Zustandsübergang fehlschlägt und die allgemeine Aktion das Erwerben des Locks ist, der Lock-Erwerber außerdem dazu in der Lage ist, die folgenden Schritte zu wiederholen, bis der Zustandsübergang erfolgreich ist: – asynchrones Abfragen des aktuellen Zustands des Locks; – spekulatives Bestimmen des nächsten Zustands des Locks; und – Versuchen, das Lock aus dem abgefragten Zustand in den spekulativ bestimmten Zustand übergehen zu lassen.
  46. System nach Anspruch 45, wobei, wenn der Zustandsübergang fehlschlägt und die allgemeine Aktion das Versuchen, das Lock zu erwerben, ist, der Lock-Erwerber außerdem in der Lage ist, anzuweisen, daß das Lock nicht erworben werden konnte.
  47. System nach Anspruch 46, wobei, wenn der Zustandsübergang erfolgreich ist, und die allgemeine Aktion das Versuchen, das Lock zu erwerben, ist, der Lock-Erwerber außerdem in der Lage ist, den Erwerb des Locks anzuzeigen.
  48. System nach Anspruch 44, wobei, der Lock-Erwerber außerdem in der Lage ist, anzuzeigen, daß das Lock erworben wurde, wenn – der Zustandsübergang erfolgreich ist, – die allgemeine Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand den Erwerb des Locks darstellt.
  49. System nach Anspruch 48, wobei der Lock-Erwerber außerdem in der Lage ist – den Thread an das Ende der Warteschlange von Threads, die darauf warten, das Lock zu erwerben, hinzuzulegen; – auf Erhalt einer Benachrichtigung, daß der Thread das Lock erwerben kann, zu warten; und – den Erwerb des Locks anzuzeigen, wenn – der Zustandsübergang fehlschlägt, – die allgemeine Aktion das Erwerben des Locks ist, und – der spekulativ bestimmte nächste Zustand nicht den Erwerb des Locks darstellt.
  50. System nach Anspruch 49, wobei der Lock-Erwerber nicht zu einem Time-Out oder Fehlschlagen in der Lage ist, wenn die gewählte allgemeine Aktion das Erwerben des Locks ist.
  51. System, das folgendes umfasst: – ein Speicherelement, das dazu in der Lage ist, eine Warteschlange von Threads zu speichern, wobei jeder Thread folgendes aufweist: – einen einzigartigen Thread-Identifikator und einen nächsten Thread-Wert, um den Zugriff auf den nächsten Thread in der Warteschlange zu erleichtern; – ein Lock mit einem Mehrzustandswert, das folgendes aufweist: – einen Flagwert, einen ersten Thread-Wert und einen letzten Thread-Wert; und – einen Lock-Freigeber, der dazu in der Lage ist, ein Freigeben einer Sperre des Locks durchzuführen durch – ein asynchrones Abfragen des aktuellen Zustands des Locks; – ein spekulatives Bestimmen des nächsten Zustands des Locks; und – einen Versuch, das Lock aus dem abgefragten Zustand in den spekulativ bestimmten Zustand übergehen zu lassen.
  52. System nach Anspruch 51, wobei, wenn der Zustandsübergang fehlschlägt, der Lock-Freigeber außerdem dazu in der Lage ist, die folgenden Schritte zu wiederholen, bis der Zustandsübergang erfolgreich ist: – ein asynchrones Abfragen des aktuellen Zustands des Locks; – ein spekulatives Bestimmen des nächsten Zustands des Locks; – einen Versuch, das Lock vom abgefragten aktuellen Zustand in den spekulativ bestimmten nächsten Zustand übergehen zu lassen.
  53. System nach Anspruch 51, wobei, wenn der Zustandsübergang erfolgreich ist, der Lock-Freigeber außerdem in dazu in der Lage ist, die Anzahl von Threads in der Warteschlange von Threads, die darauf warten, das Lock zu erwerben, mit Hilfe des spekulativ bestimmten nächsten Zustands des Locks zu bestimmen.
  54. System nach Anspruch 53, wobei, wenn die Warteschlange wenigstens einen ersten Thread aufweist, der Lock-Freigeber außerdem in der Lage ist zum: – Entfernen des ersten Threads aus der Warteschlange; und – Benachrichtigen des ersten Threads, daß der erste Thread das Lock erworben hat.
  55. System nach Anspruch 51, wobei das Lock dazu in der Lage ist, während der Zeit den Zustand zu wechseln, während der der Lock-Freigeber – asynchron den aktuellen Zustand des Locks abfragt; und – versucht, das Lock vom abgefragten Zustand in den spekulativ bestimmten Zustand übergehen zu lassen.
DE112004001564T 2003-09-08 2004-09-03 Low-contention Lock Ceased DE112004001564T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/658,626 2003-09-08
US10/658,626 US7500242B2 (en) 2003-09-08 2003-09-08 Low-contention lock
PCT/US2004/029276 WO2005026948A2 (en) 2003-09-08 2004-09-03 Low-contention lock

Publications (1)

Publication Number Publication Date
DE112004001564T5 true DE112004001564T5 (de) 2006-06-14

Family

ID=34226812

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112004001564T Ceased DE112004001564T5 (de) 2003-09-08 2004-09-03 Low-contention Lock

Country Status (5)

Country Link
US (1) US7500242B2 (de)
EP (1) EP1665045A2 (de)
JP (1) JP4342554B2 (de)
DE (1) DE112004001564T5 (de)
WO (1) WO2005026948A2 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7249229B2 (en) * 2004-03-31 2007-07-24 Gemini Mobile Technologies, Inc. Synchronous message queues
US7865701B1 (en) * 2004-09-14 2011-01-04 Azul Systems, Inc. Concurrent atomic execution
US20070006232A1 (en) * 2005-06-30 2007-01-04 Bliss Brian E Method and system for a ticket lock using a dynamically reconfigurable distributed polling area
US8434082B2 (en) * 2006-06-22 2013-04-30 Intel Corporation Efficient ticket lock synchronization implementation using early wakeup in the presence of oversubscription
US8069445B2 (en) * 2006-06-30 2011-11-29 Intel Corporation Method and apparatus for detecting lock acquisition hierarchy violations and unsafe lock releases
US9928072B1 (en) 2008-05-02 2018-03-27 Azul Systems, Inc. Detecting and recording atomic execution
US8789057B2 (en) * 2008-12-03 2014-07-22 Oracle America, Inc. System and method for reducing serialization in transactional memory using gang release of blocked threads
CN103379217B (zh) * 2012-04-28 2015-09-09 阿里巴巴集团控股有限公司 一种手持设备中输入内容自动补全的方法、装置和服务器
US10565024B2 (en) * 2016-10-19 2020-02-18 Oracle International Corporation Generic concurrency restriction

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4604694A (en) * 1983-12-14 1986-08-05 International Business Machines Corporation Shared and exclusive access control
US6247039B1 (en) 1996-05-17 2001-06-12 Sun Microsystems, Inc. Method and apparatus for disposing of objects in a multi-threaded environment
US6141720A (en) * 1997-06-12 2000-10-31 Cabletron Systems, Inc. Method and apparatus for coordination of a shared object in a distributed system
US6237019B1 (en) * 1998-03-18 2001-05-22 International Business Machines Corporation Method and apparatus for performing a semaphore operation
US6148300A (en) * 1998-06-19 2000-11-14 Sun Microsystems, Inc. Hybrid queue and backoff computer resource lock featuring different spin speeds corresponding to multiple-states
US6182186B1 (en) 1998-06-30 2001-01-30 Sun Microsystems, Inc. Method and apparatus that utilizes lock states to lock resources
US6173442B1 (en) * 1999-02-05 2001-01-09 Sun Microsystems, Inc. Busy-wait-free synchronization
US7017160B2 (en) * 2000-04-18 2006-03-21 Sun Microsystems, Inc. Concurrent shared object implemented using a linked-list with amortized node allocation
US20030200457A1 (en) * 2002-04-23 2003-10-23 International Business Machines Corporation Enhancement to the MCS lock for increased functionality and improved programmability

Also Published As

Publication number Publication date
WO2005026948A3 (en) 2005-04-28
US7500242B2 (en) 2009-03-03
JP4342554B2 (ja) 2009-10-14
EP1665045A2 (de) 2006-06-07
JP2007505374A (ja) 2007-03-08
WO2005026948A2 (en) 2005-03-24
US20050055593A1 (en) 2005-03-10

Similar Documents

Publication Publication Date Title
DE2714805C2 (de)
DE2629459C2 (de)
DE2417795C2 (de) Datenverarbeitungsanlage
DE60224774T2 (de) Datenverarbeitungssystem mit Lese-, Änderungs- und Schreibeinheit
DE2164749A1 (de) Konflikt-Lösungsverfahren und -Lösungseinrichtung
DE2744531A1 (de) Elektronische datenverarbeitungsanlage
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
DE2657848A1 (de) Steuereinheit fuer ein datenverarbeitungssystem
DE112006002908T5 (de) Technik für die Kommunikation und Synchronisation von Threads
DE10312264A1 (de) Verfahren und Vorrichtung zum Hervorrufen von Unterschieden bei mit Verriegelungsschritten versehenen Prozessoren
DE112014000340T5 (de) Vorablesezugriff auf Daten für einen Chip mit einem übergeordneten Kern und einem Scout-Kern
DE102015107654A1 (de) Dienst und System zum Unterstützen eines kohärenten Datenzugriffs auf einem Multicore-Controller
DE112016006297T5 (de) Testfall-Erzeugungsvorrichtung und Testfall-Erzeugungsprogramm
DE112004001564T5 (de) Low-contention Lock
DE2101949A1 (de) Verfahren zum Schutz von Datengruppen in einer Multiprocessing-Datenverarbeitungsanlage
DE60132961T2 (de) Unabhängige Initialisierung von Arbitern und Agenten, um verzögerte Agent-Initialisierung zu ermöglichen
DE4134392C2 (de) Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung
DE102004003102A1 (de) System und Verfahren zum Bestimmen einer Transaktionszeitüberschreitung
DE2611975A1 (de) Dv-system mit einer einrichtung zur zuordnung von prozessen zu einem prozessor auf einer prioritaetsbasis
DE19824289A1 (de) Pipelineverarbeitungsmaschine
DE10103070B4 (de) Verfahren und Prüfschaltung zum Ermitteln eines Gültigkeitsstatus für einen zeitlich zurückliegenden Loadbefehl
DE102004061339A1 (de) Scheduling-Verfahren, insbesondere Kontex-Scheduling-Verfahren, und Einrichtung zur Verwendung bei einem Scheduling-Verfahren
DE2906685C2 (de)
DE2759120C2 (de)
DE1774421B1 (de) Mehrprogramm datenverarbeitungsanlage

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law

Ref document number: 112004001564

Country of ref document: DE

Date of ref document: 20060614

Kind code of ref document: P

R011 All appeals rejected, refused or otherwise settled
R003 Refusal decision now final

Effective date: 20131028