Локальна Пам'ять Потоку (англ. Thread-local storage) — механізм, за допомогою якого в кожному окремому потоці виконання можуть використовуватися власні копії глобальних та статичних змінних.
Це буває корисним у деяких випадках, бо всі потоки розділяють одну і ту ж пам'ять свого процесу. Іншими словами, дані, розміщені в статичних чи глобальних змінних, зазвичай завжди розміщені в одному місці, якщо до них звертаються потоки одного процесу. Однак змінні розташовані у стеку є унікальними для потоку, оскільки кожний потік має свій стек, розміщений в окремому блоці пам'яті.
Іноді потрібно, щоб два потоки, що звертаються до якоїсь глобальної змінної, насправді звертались до різних місць в пам'яті, таким чином роблячи змінну локальною для потоку. Канонічним прикладом є змінна коду помилки errorno мови C.
Реалізація у різних мовах програмування
C/C++
Ключове слово __thread використовується так:
__thread int number;
- __thread визначає number як локальну змінну потоку.
- int визначає тип змінної number як цілочисельний тип int.
GCC
GCC C/C++ реалізує __thread як показано нижче.
Змінна повинна бути ініціалізована константою на етапі компіляції:
__thread int number = 1;
але не
void f (int number) { static __thread int number_copy = number;
або (C++)
__thread int number = calculate_number();
Бібліотека pthread передбачає прямі конструкції для збереження локальних даних потоку.
Pascal
У Free Pascal якщо змінна декларується з ключовим словом threadvar
і програма є багатопотоковою, кожен потік виконання отримує свою копію змінної.
Python
На Python версій 2.4 чи пізніших клас local з модуля threading може бути використаний для створення локального сховища потоку.
import threading mydata = threading.local() mydata.x = 1
Джерела
- (англ.). Архів оригіналу за 31 січня 2022. Процитовано 31 січня 2022.
{{}}
: Проігноровано|website=
()
Посилання
- ELF Handling For Thread-Local Storage [ 18 грудня 2008 у Wayback Machine.] — Document about an implementation in C or .
- Стаття «Use Thread Local Storage to Pass Thread Specific Data [ 24 березня 2016 у Wayback Machine.]» by
- Thread-Local Storage [ 26 квітня 2021 у Wayback Machine.] by
- Developer's Reference[недоступне посилання з квітня 2019]
- Стаття «It's Not Always Nice To Share [ 15 липня 2009 у Wayback Machine.]» by Walter Bright
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Skorochennya TLS takozh maye inshi znachennya Lokalna Pam yat Potoku angl Thread local storage mehanizm za dopomogoyu yakogo v kozhnomu okremomu potoci vikonannya mozhut vikoristovuvatisya vlasni kopiyi globalnih ta statichnih zminnih Ce buvaye korisnim u deyakih vipadkah bo vsi potoki rozdilyayut odnu i tu zh pam yat svogo procesu Inshimi slovami dani rozmisheni v statichnih chi globalnih zminnih zazvichaj zavzhdi rozmisheni v odnomu misci yaksho do nih zvertayutsya potoki odnogo procesu Odnak zminni roztashovani u steku ye unikalnimi dlya potoku oskilki kozhnij potik maye svij stek rozmishenij v okremomu bloci pam yati Inodi potribno shob dva potoki sho zvertayutsya do yakoyis globalnoyi zminnoyi naspravdi zvertalis do riznih misc v pam yati takim chinom roblyachi zminnu lokalnoyu dlya potoku Kanonichnim prikladom ye zminna kodu pomilki errorno movi C Realizaciya u riznih movah programuvannyaC C Klyuchove slovo thread vikoristovuyetsya tak thread int number thread viznachaye number yak lokalnu zminnu potoku int viznachaye tip zminnoyi number yak cilochiselnij tip int GCC GCC C C realizuye thread yak pokazano nizhche Zminna povinna buti inicializovana konstantoyu na etapi kompilyaciyi thread int number 1 ale ne void f int number static thread int number copy number abo C thread int number calculate number Biblioteka pthread peredbachaye pryami konstrukciyi dlya zberezhennya lokalnih danih potoku Pascal U Free Pascal yaksho zminna deklaruyetsya z klyuchovim slovom threadvar i programa ye bagatopotokovoyu kozhen potik vikonannya otrimuye svoyu kopiyu zminnoyi Python Na Python versij 2 4 chi piznishih klas local z modulya threading mozhe buti vikoristanij dlya stvorennya lokalnogo shovisha potoku import threading mydata threading local mydata x 1Dzherela angl Arhiv originalu za 31 sichnya 2022 Procitovano 31 sichnya 2022 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite book title Shablon Cite book cite book a Proignorovano website dovidka PosilannyaELF Handling For Thread Local Storage 18 grudnya 2008 u Wayback Machine Document about an implementation in C or C Stattya Use Thread Local Storage to Pass Thread Specific Data 24 bereznya 2016 u Wayback Machine by Thread Local Storage 26 kvitnya 2021 u Wayback Machine by Developer s Reference nedostupne posilannya z kvitnya 2019 Stattya It s Not Always Nice To Share 15 lipnya 2009 u Wayback Machine by Walter Bright