Sdílet prostřednictvím


Místní úložiště vláken

Všechna vlákna procesu sdílejí svůj virtuální adresní prostor. Místní proměnné funkce jsou jedinečné pro každé vlákno, které funkci spouští. Statické a globální proměnné jsou však sdíleny všemi vlákny v procesu. S vláknem místního úložiště (TLS) můžete poskytnout jedinečná data pro každé vlákno, ke kterému má proces přístup pomocí globálního indexu. Jedno vlákno přiděluje index, který může ostatní vlákna použít k načtení jedinečných dat přidružených k indexu.

Konstantní TLS_MINIMUM_AVAILABLE definuje minimální počet indexů TLS dostupných v každém procesu. Toto minimum je zaručeno alespoň 64 pro všechny systémy. Maximální počet indexů na proces je 1 088.

Při vytváření vláken systém přidělí pole LPVOID hodnoty protokolu TLS, které se inicializují na hodnotu NULL. Před použitím indexu je nutné jej přidělit jedním z vláken. Každé vlákno ukládá data indexu TLS do slotu TLS v poli. Pokud se data přidružená k indexu vejdou do hodnoty LPVOID, můžete data uložit přímo do slotu TLS. Pokud ale tímto způsobem používáte velký počet indexů, je lepší přidělit samostatné úložiště, konsolidovat data a minimalizovat počet využitých slotů TLS.

Následující diagram znázorňuje fungování protokolu TLS. Příklad kódu ilustrující použití místního úložiště vlákna najdete v tématu Použití místního úložiště vlákna.

diagram, který ukazuje, jak proces T L S funguje.

Proces má dvě vlákna, vlákno 1 a vlákno 2. Přidělí dva indexy pro použití s protokolem TLS, gdwTlsIndex1 a gdwTlsIndex2. Každé vlákno přiděluje dva paměťové bloky (jeden pro každý index), do kterých se mají ukládat data, a ukládá ukazatele na tyto paměťové bloky do odpovídajících slotů TLS. Pro přístup k datům přidruženým k indexu vlákno načte ukazatel na blok paměti z slotu TLS a uloží je do místní proměnné lpvData.

Je ideální použít protokol TLS v knihovně dynamického propojení (DLL). Příklad najdete v tématu Použití místního úložiště vláken v knihovně dynamického propojení.

thread Local Storage (Visual C++)

pomocí místního úložiště vláken

použití místního úložiště vláken v knihovně dynamického propojení