moje pytanie brzmi: po co używać mechanizmu TLS zamiast tylko zmiennych lokalnych w funkcji wątku? Czy możesz podać dobry przykład lub jaka jest przewaga TLS nad lokalnymi wersjami? Dziękuję Ci, Mateusz
Odpowiedzi:
4 dla odpowiedzi № 1TLS jest pomocny w przypadku sesji użytkownikainformacje kontekstowe, które są specyficzne dla wątku, ale mogą być wykorzystane w różnych niepowiązanych metodach. W takich sytuacjach TLS jest wygodniejszy niż przekazywanie informacji w górę iw dół stosu wywołań.
7 dla odpowiedzi nr 2
Jeśli możesz użyć zmiennych lokalnych, zrób to i tyniezmiennie mogą używać mieszkańców. Tylko w ostateczności należy używać lokalnej pamięci wątków, która ma prawie wszystkie te same wady co zmienne globalne. Chociaż szukasz powodu do korzystania z lokalnej pamięci wątków, w rzeczywistości najlepszą praktyką jest poszukiwanie sposobów, aby tego uniknąć!
3 dla odpowiedzi nr 3
Oto dobry link od Intela na temat korzystania z lokalnej pamięci masowej w celu zmniejszenia synchronizacji: https://software.intel.com/en-us/articles/use-thread-local-storage-to-reduce-synchronization
2 dla odpowiedzi № 4
Znam jeden bardzo dobry przykład użycia TLS. Kiedy wdrażasz LIBC lub przenosisz jeden z wariantów LIBC na nową platformę, potrzebujesz w jakiś sposób zmiennej „errno” (która na płycie jednowątkowej jest po prostu zewnętrzną int errno), aby była unikalna dla każdego wątku. Funkcje LIBC po prostu przechowują go w TLS bieżącego wątku, a wywołanie errno po prostu odczytuje go z TLS. TLS to sposób na zabezpieczenie dowolnego wątku biblioteki. Przechowujesz dowolny rodzaj danych „statycznych” lub „globalnych” w TLS, więc ta sama funkcja wywoływana z innego wątku nie uszkodzi twoich zmiennych „statycznych” lub „globalnych” w innym wątku. Co sprawia, że masz dostęp do funkcji z różnych wątków.
1 dla odpowiedzi nr 5
Lokalna pamięć wątków może być używana do emulacji zmiennych globalnych lub statycznych dla poszczególnych wątków. „Normalne” zmienne lokalne nie mogą.