Threadsicherheit

Threadsicherheit

Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt werden kann, ohne dass diese sich gegenseitig behindern.

Teile eines Computerprogramms können zum gleichen Zeitpunkt mehrmals ausgeführt werden. Dabei handelt es sich oft um eine Komponente oder auch nur um eine Funktion des Programms. Zum Zweck der Mehrfachausführung bieten Betriebssysteme sogenannte Threads an. Jeder Thread arbeitet dabei unabhängig von den anderen diesen Programmteil ab. Häufig muss das Programm dabei gleichzeitig auf einen gemeinsamen Speicherbereich (Shared Memory) des Computers zugreifen. Änderungen der einzelnen Threads müssen koordiniert werden, um einen chaotischen Zustand des Speichers zu verhindern. Man spricht hier auch von Synchronisation. Zum Zweck der Threadsynchronisation existieren mehrere Konzepte, wie z. B. Locks (engl. Sperre: Ein Thread sperrt einen Speicherbereich zur exklusiven Bearbeitung, andere Threads haben währenddessen keinen Zugriff auf diesen Speicherbereich, bis dieser wieder freigegeben wird), Mutexe und Semaphore.

Ist der gleichzeitige Zugriff mehrerer Threads möglich, so bezeichnet man die Komponente auch als eintrittsinvariant oder reentrant.

Inhaltsverzeichnis

Inkonsistenzen

Die gleichzeitige Manipulation von Daten durch mehrere Threads kann zu sogenannten inkonsistenten Daten führen. Das geschieht, wenn ein Thread Daten ändert, weitere Threads dies aber nicht erfahren und weiterhin den alten Zustand der Daten annehmen. Fortlaufende Berechnungen basieren nun auf nicht mehr aktuellen Daten und sind somit falsch. Ein Beispiel für diese Problematik ist die Race Condition.

Beispiele

Gehaltsdaten

Eine Komponente dient zum Verwalten von Gehaltsdaten. Das Programm kann gleichzeitig von zwei Personalmitarbeitern verwendet werden. Angenommen Mitarbeiter A erhöht das Gehalt eines Angestellten von 1000,00 Euro um einen Inflationsausgleich von 100,00 Euro. Nahezu gleichzeitig erhöht Mitarbeiter B das Gehalt ebenfalls um 200,00 Euro wegen besonderer Leistung. Insgesamt soll sich das Gehalt auf 1300,00 Euro erhöhen.

Bei Verwendung nicht threadsicherer Software kann es zu folgender Bearbeitungsabfolge kommen:

  • Mitarbeiter A liest das aktuelle Gehalt (1000,00 Euro).
  • Mitarbeiter B liest das aktuelle Gehalt (1000,00 Euro).
  • Mitarbeiter A erhöht das aktuelle Gehalt um 100,00 Euro und speichert 1100,00 Euro.
  • Mitarbeiter B erhöht das aktuelle Gehalt um 200,00 Euro und speichert 1200,00 Euro.

Ursache ist, dass bei der zweiten Änderung die erste nicht bekannt war. Es werden also lediglich 200,00 Euro auf das Ursprungsgehalt addiert. Die erste Änderung wird überschrieben und ist verloren (sog. „Lost Update“-Problem).

Änderungen einer MediaWiki-Seite

Ein Beispiel für eine threadsichere Applikation ist MediaWiki. Es ist möglich, dass zwei Autoren dieselbe Seite zum selben Zeitpunkt ändern. Der Autor, der die Seite als zweites speichert, erhält von der Software eine Warnung und den Hinweis, dass es bereits eine Änderung gab. Es liegt nun in seiner Verantwortung, diesen Konflikt zu lösen, ohne den vorherigen Beitrag zu überschreiben.

Synchronisation in Programmiersprachen

Manche Elementarfunktionen von Programmiersprachen, die nur lokale Variablen bearbeiten, sind immer threadsicher, so zum Beispiel die meisten mathematischen Funktionen, die Zwischenergebnisse immer auf dem Stack ablegen und immer auf Kopien der Originalvariablen arbeiten.

Siehe auch


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Thread-Sicherheit — Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt… …   Deutsch Wikipedia

  • Thread-safe — Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt… …   Deutsch Wikipedia

  • Einzelstück (Entwurfsmuster) — Das Singleton (auch Einzelstück genannt) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster und gehört zur Kategorie der Erzeugungsmuster (engl. Creational Patterns). Es verhindert, dass von einer Klasse mehr als ein Objekt erzeugt… …   Deutsch Wikipedia

  • Singleton (Entwurfsmuster) — Das Singleton (auch Einzelstück genannt) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster und gehört zur Kategorie der Erzeugungsmuster (engl. Creational Patterns). Es verhindert, dass von einer Klasse mehr als ein Objekt erzeugt… …   Deutsch Wikipedia

  • Singleton Pattern — Das Singleton (auch Einzelstück genannt) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster und gehört zur Kategorie der Erzeugungsmuster (engl. Creational Patterns). Es verhindert, dass von einer Klasse mehr als ein Objekt erzeugt… …   Deutsch Wikipedia

  • COM+ — Das Component Object Model [kəmˈpoʊnənt ˈɒbdʒɪkt ˈmɒdl] (Abk. COM) ist eine von Microsoft entwickelte Plattform Technologie, um unter dem Betriebssystem Windows Interprozesskommunikation und dynamische Objekterzeugung zu ermöglichen. COM fähige… …   Deutsch Wikipedia

  • Component Object Model — Das Component Object Model [kəmˈpoʊnənt ˈɒbdʒɪkt ˈmɒdl] (Abk. COM) ist eine von Microsoft entwickelte Plattformtechnik, um unter dem Betriebssystem Windows Interprozesskommunikation und dynamische Objekterzeugung zu ermöglichen. COM fähige… …   Deutsch Wikipedia

  • Rails — Ruby on Rails RoR Standard Seite …   Deutsch Wikipedia

  • Reentrant — Eine Routine bzw. Methode wird als eintrittsinvariant (engl. reentrant) oder auch wiedereintrittsfähig bezeichnet, wenn sie so implementiert ist, dass sie von mehreren Prozessen gleichzeitig ausgeführt werden kann. Dabei dürfen sich die… …   Deutsch Wikipedia

  • Ruby On Rails — RoR Standard Seite …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”