TLS ist hilfreich für Dinge wie Kontextinformationen für Benutzersitzungen, die threadspezifisch sind, aber in verschiedenen nicht verwandten Methoden verwendet werden können. In solchen Situationen ist TLS bequemer als die Informationen nach oben und unten im Call-Stack zu übertragen.
Wenn Sie lokale Variablen verwenden können, dann tun Sie dies und Sie können ausnahmslos Locals verwenden. Nur als letzte Möglichkeit sollten Sie lokalen Thread-Speicher verwenden, der fast alle die gleichen Nachteile wie globale Variablen aufweist. Obwohl Sie nach einem Grund suchen, lokalen Thread-Speicher zu verwenden, ist die beste Vorgehensweise, nach Möglichkeiten zu suchen, dies zu vermeiden!
Hier ist ein guter Link von Intel zur Verwendung von Thread-Local Storage zur Reduzierung der Synchronisation: Ссылка
Ich kenne ein sehr gutes Beispiel für die Verwendung von TLS. Wenn Sie LIBC implementieren oder eine der LIBC-Varianten auf eine neue Plattform portieren, müssen Sie die Variable 'errno' (die auf der single-thread-Plattform nur extern in errno ist) irgendwie für jeden Thread eindeutig machen. LIBC-Funktionen speichern es einfach in TLS des aktuellen Threads und ein Aufruf von errno liest es einfach aus TLS. TLS ist der Weg, um jeden Bibliotheks-Thread sicher zu machen. Sie speichern jede Art von 'statischen' oder 'globalen' Daten in TLS, so dass die gleiche Funktion, die von einem anderen Thread aufgerufen wird, Ihre 'statischen' oder 'globalen' Variablen in einem anderen Thread nicht beschädigt. Das macht Sie zu Funktionen, die aus verschiedenen Threads stammen.
Tags und Links multithreading thread-local-storage storage local