Lokaler Threadspeicher (TLS)

Durch den lokalen Threadspeicher (Thread Local Storage, TLS) kann jeder Thread in einem bestimmten Multithreadprozess Speicherplätze für threadspezifische Daten zuordnen.Dynamisch gebundene (Common Language Runtime) threadspezifische Daten wird über das TLS ([TlsAlloc] API unterstützt, [TlsGetValue], [TlsSetValue] und [TlsFree]).Von Win32 und dem Visual C++-Compiler werden nun neben der bestehenden API-Implementierung statisch gebundene, auf einzelne Threads bezogene (Ladezeit-) Daten unterstützt.

API-Implementierung für TLS

TLS wird sowohl über die Win32-API-Ebene als auch über den Compiler implementiert.Weitere Informationen finden Sie unter Win32 API-Dokumentation für [TlsAlloc], [TlsGetValue], [TlsSetValue] und [TlsFree].

Der Visual C++-Compiler fügt ein Schlüsselwort ein, um TLS-Vorgänge zu automatisieren. Auf diese Weise lässt sich die Verwendung der API-Ebene vermeiden.Diese Syntax wird im nächsten Abschnitt beschrieben, in dem die Compiler-Implementierung für TLS erläutert wird.

Compiler-Implementierung für TLS

Zur Unterstützung von TLS wurden die C- und C++-Sprachen um ein neues Attribut, thread, erweitert, das vom Visual C++-Compiler unterstützt wird.Bei diesem Attribut handelt es sich um einen erweiterten Speicherklassenmodifizierer, wie oben erläutert.Verwenden Sie zur Deklaration einer thread-Variablen das __declspec-Schlüsselwort.Mit folgendem Code wird z. B. eine Ganzzahl-TLS-Variable deklariert und mit einem Wert initialisiert:

__declspec( thread ) int tls_i = 1;

Siehe auch

Konzepte

Multithreading bei C und Win32

Regeln und Einschränkungen für TLS