DE112004001564T5 - Low-contention Lock - Google Patents
Low-contention Lock Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual 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.
– 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. Block110 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 in3 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 von3 und4 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 Zustand310 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 Zustand320 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 Zustand310 zurückkehren. Wenn, ebenfalls in dieser Ausführungsform, das Lock erworben wird, kann das Lock auf Zustand330 ü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 in3 und4 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 Zustand320 zurückkehren. Wenn, ebenfalls in dieser Ausführungsform, das Lock erworben wird, kann das Lock zu Zustand340 ü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 in3 und4 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 Zustand330 zurückkehren oder in Zustand340 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 Zustand340 verbleiben. Es ist vorgesehen, daß, wenn das Lock nach einer Freigabe- oder Erwerbsaktion in Zustand340 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 aus3 . Reihe410 fasst Zustand310 zusammen. Reihe420 fasst Zustand320 zusammen. Reihe430 fasst Zustand330 zusammen. Reihe440 faßt Zustand340 zusammen. Allerdings illustrieren3 und4 lediglich eine Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen. - Zu
1 zurückkehrernd, stellt Block130 dar, daß, sobald der aktuelle Zustand des Locks bestimmt wurde, der nächste Zustand des Locks in Block120 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 durch3 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 Block120 und Block140 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öcken120 und140 ä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 Block140 fehlschlägt, die gewählte Aktion überprüft wird. Die gewählte oder abgefragte Aktion von Block110 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 illustriert1 umgekehrt, daß dann, wenn die gewählte Aktion „Erwerb" oder „Freigabe" war, die Technik die Blöcke120 ,130 und140 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 von1 , die eine Ausführungsform einer Technik genauer dargstellt, die eingesetzt werden kann, wenn der Zustandsübergang von Block140 aus1 erfolgreich ist. - Block
210 aus2 zeigt, daß je nach der gewählten Aktion verschiedene Vorfälle eintreten können (siehe Block110 aus1 ). Wenn die gewählte Aktion „Erwerb" oder „Versuch" war, zeigt Block220 , 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 Zustand310 von3 . 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 von3 in Zustand330 ü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 Zustand340 ü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 Zustand340 ü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 aus2 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 in3 dargestellt ist, kann dies umfassen, daß das Lock aus Zustand320 in Zustand310 übergeht. In dieser Ausführungsform kann Block270 aus2 synonym mit Block140 aus1 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 aus2 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 von3 in Zustand320 ü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 Zustand330 ü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 Zustand340 ü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 Zustand330 denselben Wert enthielten, würde es bei dieser Ausführungsform dazu kommen, daß der erste und der letzte Thread-Zeiger in Zustand340 unterschiedliche Werte enthalten. Dies ist jedoch lediglich eine hochspezifische Ausführungsform des offenbarten Gegenstands, und es sind andere Ausführungsformen vorgesehen. - Block
286 aus2 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öcke140 und150 aus1 enthalten sein können. In dieser Ausführungsform können die Blöcke140 und150 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 Vorrichtung501 und eines Systems500 illustriert, die den Erwerb und die Freigabe eines Lock510 gemäß dem offenbarten Gegenstand ermöglichen. In einer Ausführungsform kann das Lock510 einen Zustandswert520 enthalten. Der Zustandswert kann einen Flagwert523 enthalten, der anzeigt, ob das Lock gegenwärtig gehalten wird oder nicht und/oder die ungefährte Länge einer Warteschlange von Threads550 , die darauf warten, das Lock zu erwerben, anzeigt, einen ersten Thread-Wert525 , um Zugriff auf einen ersten Thread560 zu erleichtern, und/oder einen letzten Thread-Wert528 , um Zugriff auf einen letzten Thread580 zu erleichtern. - In einer Ausführungsform kann das System
500 eine Warteschlange von Threads550 enthalten, die darauf warten, das Lock510 zu erwerben. Während5 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 Thread560 , einen letzten Thread580 , einen zweiten Thread570 und mehrere andere Threads590 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 Wartewert593 enthalten, der anzeigt, daß der Thread darauf wartet, das Lock zu erwerben, und/oder der einen nächsten Thread-Wert597 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 System500 einen Lock-Erwerber530 enthalten, um den Erwerb des Locks510 zu erleichtern. In einer Ausführungsform kann der Lock-Erwerber dazu in der Lage sein, alle oder einen Teil der in1 und2 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 Warteschlange550 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 System500 einen Lock-Freigeber540 enthalten, um die Freigabe des Locks510 zu erleichtern. In einer Ausführungsform kann der Lock-Freigeber alle oder einen Teil der in1 und2 dargestellten und oben beschriebenen Techniken durchzuführen. In einem anderen Beispiel kann der Lock-Freigeber dazu in der Lage sein, zu bestimmen, ob eine Warteschlange550 existiert oder nicht. Wenn eine Warteschlange existiert, kann der Lock-Freigeber den ersten Thread560 aus der Warteschlange entfernen und den zweiten Thread570 auf die erste Position in der Warteschlange bewegen. Der Lock-Freigeber kann dann den ersten Thread560 davon unterrichten, daß das Lock zur Verfügung steht. Es ist vorgesehen, daß in einer Ausführungsform der Lock-Freigeber den nächsten Thread-Wert597 dazu benutzt, auf den zweiten Thread zuzugreifen, und den Wartewert593 , 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 System500 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 Lockzustands520 oder der Thread-Werte593 und597 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 Wartewert593 eines Thread und ein nächster Thread-Wert597 in einem Speicher und in separaten Cache-Lines dieses Speichers gespeichert werden. In einer anderen Ausführungsform können der Warteschlangenlängenwert524 und der letzte Thread-Wert528 eines Locks in derselben Cache-Line eines Speichers gespeichert werden. Der erste Thread-Wert525 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)
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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)
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)
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 |
-
2003
- 2003-09-08 US US10/658,626 patent/US7500242B2/en not_active Expired - Fee Related
-
2004
- 2004-09-03 EP EP04783504A patent/EP1665045A2/de not_active Withdrawn
- 2004-09-03 JP JP2006525539A patent/JP4342554B2/ja not_active Expired - Fee Related
- 2004-09-03 DE DE112004001564T patent/DE112004001564T5/de not_active Ceased
- 2004-09-03 WO PCT/US2004/029276 patent/WO2005026948A2/en active Application Filing
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 |