Lokaler Threadspeicher (TLS)
Aktualisiert: November 2007
Durch den lokalen Threadspeicher (Thread Local Storage, TLS) kann jeder Thread in einem bestimmten Multithreadprozess Speicherplätze für threadspezifische Daten zuordnen. Dynamisch (zur Laufzeit) gebundene, threadspezifische Daten werden durch die TLS-API unterstützt (TlsAlloc, 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 in der Dokumentation zur Win32-API unter 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;