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

LG zeigt elastisches OLED-Display

Es lässt sich um bis zu 50 Prozent dehnen. Allerdings besitzt es eine deutliche geringere…

2 Wochen ago

BSI zu Cybersicherheit: Bedrohungslage bleibt angespannt

Allerdings nimmt auch die Resilienz gegenüber Cyberattacken zu. Das BSI hat außerdem die Cybersicherheit anstehender…

2 Wochen ago

IT-Ausgaben in Europa steigen 2025 voraussichtlich um 8,7 Prozent

Es ist das größte Wachstum in einem Jahr seit 2021. Unter anderem lässt das Interesse…

2 Wochen ago

Magento-Agentur für große Webshops: Was sollte die Magento-Agentur leisten können?

Magento zählt zu den führenden Shopsystemen in der Welt. Es punktet mit hoher Flexibilität und…

2 Wochen ago

Trojaner tarnt sich als AutoCAD

SteelFox gelangt über angebliche Cracks für kostenpflichtige Anwendungen auf die Rechner seiner Opfer. Betroffen sind…

2 Wochen ago

Ymir: Ransomware mit ausgeklügelter Verschleierung

Ymir nutzt fortschrittliche Verschleierungsmethoden. Sie verschlüsselt bestimmte Dateien auf einer Whitelist nicht, um einer Entdeckung…

2 Wochen ago