Einführung in die Multithreading-Programmierung

Monitore stellen eine gute Möglichkeit dar, die Funktionalität von Locks und Bedingungsvariablen in einem standardmäßigen Klassendesign zu verkapseln. Ein Monitor ist eine Klasse mit eingebautem Lock und Bedingungsvariable. Beim Aufruf einer Klassenmethode wird das Lock erhalten und wieder freigegeben, sobald die Methode zurückkehrt. Das bedeutet, dass zwei Threads nicht zur selben Zeit eine Methode desselben Objekts aufrufen können. So wird die innere Programmlogik vor Race-Conditions und Datenkorruption geschützt.

Es gibt allerdings auch Situationen, in denen innerhalb einer Monitor-Methode auf eine bestimmte Statusbedingung gewartet werden soll. Die oben gezeigte ursprüngliche Methode mit der Endlosschleife würde ein Deadlock verursachen. Denn der Lock des Monitors bliebe zugewiesen, bis der Thread die Endlosschleife beendet hat. Damit könnte kein anderer Thread auf die Methoden des Monitors zugreifen, um dessen Status zu modifizieren. Damit man dieses Problem umgehen kann, bieten Monitore außerdem die Funktionalität einer Bedingungsvariablen.

Monitore lassen sich in Java erstellen, indem der Deklaration der Methode, die als Locking-Methode fungieren soll, der Schlüsselbegriff synchronized vorangestellt wird. Java-Monitore stellen geschützte Methoden bereit, um auf die Bedingungsvariable des Monitors zu warten und diese zu benachrichtigen.

Das Warteschlangen-Beispiel wird jetzt so verändert, dass es Javas Monitor-Funktionalität verwendet. Dadurch entsteht der bisher am besten lesbare Code.

Die Muster beachten

Damit wurden die drei wichtigsten Tools für Multithreading in Programmiersprachen wie Java und C/C++ vorgestellt. Für Multithreading-Programmierung in C++ mithilfe ähnlicher Konzepte und Werkzeuge wie in Java empfiehlt sich die Verwendung der Boost.Thread-Bibliothek. Allerdings umfasst Multithreading wesentlich mehr als nur Programmierwerkzeuge. Der Trick besteht darin, sich mit den gängigen Mustern vertraut zu machen, die in den unterschiedlichen Anwendungen auftauchen.

Beim Entwickeln einer Multithreading-Lösung sollten unbedingt deren spezifische Aufbaumuster Beachtung finden. Sonst wird in neun von zehn Fällen das Rad neu erfunden. Das vorangegangene Beispiel der blockierenden Warteschlange stellt eine einfache Implementierung des Producer-Consumer-Modells dar. Ein anderes Beispiel wäre das Readers-Writers-Problem. Es gestattet beim Lesen mehreren Threads gleichzeitig den Zugriff auf eine Ressource, beim Schreiben hingegen nur einem Thread.

Page: 1 2 3 4 5 6

ZDNet.de Redaktion

Recent Posts

Fast jedes zweite Passwort in einer Minute knackbar

Dies zeigt eine Analyse von fast 200 Millionen Passwörtern, die der Security-Spezialist Kaspersky im Darknet…

2 Wochen ago

DLL-Sideloading-Angriffe von Trojaner „Casbaneiro“

Neue ausgeklügelte Malware-/Trojaner-Angriff zielen auf Anmeldedaten und Kreditkarteninformationen von Zahlungssystemen, Banken und Krypto-Börsen ab.

2 Wochen ago

Hacker-Frühwarnsystem spürt gestohlene Darknet-Daten auf

Darknet-Monitor von itsmydata observiert das „dunkle Internet“ und schlägt bei Datendiebstahl Alarm.

2 Wochen ago

Guthaben für Prepaid-Handys einfach online aufladen – darauf kommt es an

Ohne Smartphone kommt heute kaum noch jemand aus, ist es doch für die meisten ein…

2 Wochen ago

Apple Vision Pro im Arbeitsumfeld: Hype oder Highlight?

Handelt es sich um ein ernstzunehmendes Werkzeug oder ist es lediglich eine schöne und teure…

2 Wochen ago

Wimbledon: KI für personalisierte Spielerberichte

„Catch Me Up“, entwickelt und trainiert mit IBMs Granite LLM, hilft Tennisfans, über alle Spiele…

2 Wochen ago