Thread-Safety

Hallo,

was ist eigentlich die Definition von „thread-safe“? Welche Voraussetzungen muss mein Code erfüllen um als „thread-safe“ zu gelten?

Welche Mechanismen gibt es um „concurrent accesses“ (mann, manchmal fällt mir kein gescheites deutsches wort ein :wink: auf z.B. gemeinsam benutzte Ressourcen zu verhindern und trotzdem zu garantieren, dass der Code ausgeführt wird.

Danke
Bruno

Hi,

Unter „thread-safe Programming“ versteht man das Schützen von Daten und Code. Das heisst jeder Thread muss eine eigene Kopie einer Variable bekommen damit er nicht andere Inhalte überschreibt. In der OOP sind Objektfelder automatisch getrennt für jeden Thread nur der Code wird geshared was nichts negatives macht. Globale Variablen müssen explizit geschützt werden, in Delphi ist das durch das Keyword THREADVAR zu realisieren. Deshalb muss es der Compiler/die Sprache auch unterstützen das liebe Multi-Threading. Das ist auch der Grund warum in VB böse aussieht :wink:

Der andere Teil ist das Schützen von Code. Dabei stellt das Betriebbsystem Mechanismen wie Mutexes oder Critical Sections zur Verüfung. „Klammerst“ du einen wichtigen Code-Teil in eine Critical Section so wird der Task Scheduler vom OS abgehalten diesem Thread den „Fokus“ (CPU-Time) zu entziehen bis die Critical Section abgearbeitet ist. Damit eventuelle Ergebnisse nicht von aussen her beinträchtig werden.

Roger

Ah danke, das is schonmal sehr aufschlussreich gewesen.

Bei mir geht es um C++ auf Linux und Possix Threads, da hab ich auch schon von Mutex-Locks gehört.

Die Sache ist halt die, dass ich einen riesigen dynamisch allokierten Speicher habe, auf den die verschiedenen Threads bei einer Anfrage zugreifen.

Muss ich eigentlich auch beim lesen locken oder nur beim schreiben?

Was muss ich eigentlich Angeben zum locken? Eine Speicheradresse und die Größe oder wie funktioniert sowas? Ich möchte nur das jeweilige Element locken, nicht dass da dann alles still steht.

Bruno