Teilen über


Lokaler Threadspeicher

Alle Threads eines Prozesses teilen seinen virtuellen Adressraum. Die lokalen Variablen einer Funktion sind für jeden Thread eindeutig, der die Funktion ausführt. Die statischen und globalen Variablen werden jedoch von allen Threads im Prozess gemeinsam verwendet. Mit lokalen Threadspeicher (TLS) können Sie eindeutige Daten für jeden Thread bereitstellen, auf den der Prozess über einen globalen Index zugreifen kann. Ein Thread weist den Index zu, der von den anderen Threads verwendet werden kann, um die eindeutigen Daten abzurufen, die dem Index zugeordnet sind.

Die Konstante TLS_MINIMUM_AVAILABLE definiert die Mindestanzahl der in jedem Prozess verfügbaren TLS-Indizes. Dieses Minimum ist garantiert mindestens 64 für alle Systeme. Die maximale Anzahl von Indizes pro Prozess beträgt 1.088.

Wenn die Threads erstellt werden, weist das System ein Array von LPVOID- Werten für TLS zu, die in NULL initialisiert werden. Bevor ein Index verwendet werden kann, muss er von einem der Threads zugewiesen werden. Jeder Thread speichert seine Daten für einen TLS-Index in einem TLS-Steckplatz im Array. Wenn die einem Index zugeordneten Daten in einen LPVOID- Wert passen, können Sie die Daten direkt im TLS-Steckplatz speichern. Wenn Sie jedoch eine große Anzahl von Indizes auf diese Weise verwenden, ist es besser, separaten Speicher zuzuweisen, die Daten zu konsolidieren und die Anzahl der verwendeten TLS-Slots zu minimieren.

Das folgende Diagramm veranschaulicht, wie TLS funktioniert. Ein Codebeispiel zur Verwendung des lokalen Threadspeichers finden Sie unter Using Thread Local Storage.

Diagramm, das zeigt, wie der T L S-Prozess funktioniert.

Der Prozess verfügt über zwei Threads, Thread 1 und Thread 2. Es weist zwei Indizes für die Verwendung mit TLS, gdwTlsIndex1 und gdwTlsIndex2 zu. Jeder Thread weist zwei Speicherblöcke (eine für jeden Index) zu, in denen die Daten gespeichert werden sollen, und speichert die Zeiger auf diese Speicherblöcke in den entsprechenden TLS-Slots. Um auf die daten zuzugreifen, die einem Index zugeordnet sind, ruft der Thread den Zeiger auf den Speicherblock vom TLS-Steckplatz ab und speichert sie in der lokalen lpvData-Variablen.

Es ist ideal, TLS in einer Dynamic Link Library (DLL) zu verwenden. Ein Beispiel finden Sie unter Verwenden des lokalen Threadspeichers in einer Dynamic Link Library.

lokalen Threadspeicher (Visual C++)

Verwenden von lokalen Threadspeicher-

Verwenden des lokalen Threadspeichers in einer Dynamic Link Library