Einführung in die Multithreading-Programmierung

Locks stellen ein einfaches Konzept dar, das die grundlegenden Elemente für fast alle Multithreading-Programme liefert. Die Idee, die hinter einem Lock steht, ist unkompliziert: Nur ein Thread kann einen Lock erhalten. Nach Beendigung seiner Aufgabe muss er ihn wieder freigeben. Falls ein anderer Thread versucht, den Lock zu erhalten, muss er bis zur Freigabe warten. Erst dann kann er ihn selbst nutzen und in der Ausführung fortfahren.

Locks lassen sich verwenden, um Bereiche des Codes zu definieren, die zu einer Zeit jeweils nur ein Thread ausführen können (mutual exclusion zones). Dies beseitigt das Problem, dass mehrere Threads gemeinsam genutzte Daten bei unvorhersehbar verschränkter Ausführung korrumpieren.

Hier ein modifiziertes Warteschlangen-Beispiel, das keine Probleme mit Verschränkungen erzeugt.


Damit wurde die neue Variable lock eingeführt. lock.lock() bedeutet, dass der Thread versucht, das Lock zu erhalten, und es dann per lock.unlock() wieder freigibt. Falls ein anderer Thread versucht, eine übernommene Lock-Variable zu erhalten, wartet er, bis diese freigeben ist. Nur ein Thread darf die Überprüfung der Größe und das Entfernen zur selben Zeit durchführen. Dadurch gibt es keine Probleme mehr mit verschränkten Threads.

Es gilt zu beachten, dass nicht einfach die gesamte dequeue-Methode in eine mutual exclusion zone umgewandelt wird. Wenn der Thread in die Schleife eintritt, würde er sonst das Lock niemals freigeben und einem anderen Thread erlauben, der Warteschlange etwas hinzuzufügen. Daraus resultiert eine Endlosschleife, in Threading-Kreisen deadlock genannt.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Einführung in die Multithreading-Programmierung

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *