Warum Thread Local Storage (TlsAlloc, TlsGetValue, ets) anstelle von lokalen Variablen verwenden

8

Meine Frage ist, warum TLS-Mechanismus anstelle von nur lokalen Variablen in einer Thread-Funktion verwenden? Können Sie bitte ein gutes Beispiel nennen, oder was ist der Vorteil von TLS gegenüber lokalen vars? Vielen Dank, Mateusz

    
mateusz m 11.06.2011, 18:07
quelle

5 Antworten

4

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.

    
btreat 11.06.2011, 18:15
quelle
7

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!

    
David Heffernan 11.06.2011 18:20
quelle
3

Hier ist ein guter Link von Intel zur Verwendung von Thread-Local Storage zur Reduzierung der Synchronisation: Ссылка

    
Karthik Balaguru 20.09.2014 21:27
quelle
2

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.

    
mishmashru 13.10.2014 15:21
quelle
1

Thread-lokaler Speicher kann verwendet werden, um globale oder statische Variablen pro Thread zu emulieren. "Normale" lokale Variablen können nicht.

    
duskwuff 11.06.2011 18:11
quelle