Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Thread-local storage

TLS kann dazu dienen, Daten vor unbeabsichtigten Änderungen durch andere Threads zu schützen, oder Race Conditions zu verhindern. QS-Informatik Beteilige …

Inhalt3 Abschnitte
  1. 1. Grundidee und Zweck
  2. 2. Technische Umsetzung und Beispiele
  3. 3. Verfügbarkeit

Grundidee und Zweck

Thread-local storage (TLS) ist Speicherplatz in einem mehrläufigen Prozess, in dem Daten für jeden Thread getrennt gespeichert werden können. Ein Thread ist ein Ausführungsstrang innerhalb eines Programms; mehrere Threads können parallel oder scheinbar parallel laufen.

Variablen mit dem Attribut TLS erhalten für jeden Thread automatisch eine eigene Instanz. Das bedeutet: Jeder Thread arbeitet mit seiner eigenen Kopie der Variablen. Der Compiler erzeugt dafür automatisch Code, sodass ein Zugriff immer auf die Kopie erfolgt, die zum jeweiligen Thread gehört.

TLS kann helfen, Daten vor unbeabsichtigten Änderungen durch andere Threads zu schützen. Außerdem kann es Race Conditions verhindern, also Fehler, die entstehen, wenn mehrere Threads gleichzeitig auf dieselben Daten zugreifen und das Ergebnis von der zeitlichen Reihenfolge abhängt.

Technische Umsetzung und Beispiele

Unter Windows/IA-32 sowie Windows x86 bzw. x64 erfolgt der Zugriff auf TLS zum Beispiel über ein Segment-Register: FS bei x86 und GS bei x64. Dieses Register verweist für jeden Thread auf den sogenannten Thread Environment Block.

Für GCC kann TLS mit dem Attribut __thread verwendet werden, zum Beispiel: __thread int i;, extern __thread struct state s; oder static __thread char *p;.

Unter Visual C++ wird dafür das Attribut __declspec(thread) genutzt, zum Beispiel: __declspec(thread) int i;, extern __declspec(thread) struct state s; oder static __declspec(thread) char *p;.

Seit C++11 gibt es für Deklarationen das Schlüsselwort thread_local. Es dient als einheitliche Alternative zu den GCC- und MSVC-spezifischen Attributen.

Verfügbarkeit

TLS ist für mehrere Prozessorarchitekturen verfügbar. Der Artikel nennt IA-32, x86-64, SPARC, SuperH, Alpha und S390 sowie ARM-Prozessoren.

Weiterlesen