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 (Laufzeit) threadspezifische Daten werden mit der TLS-API ([TlsAlloc], [TlsGetValue], [TlsSetValue] und [TlsFree]) unterstützt. 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 in der 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;