Локальна Пам'ять Потоку (англ. 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, Інтернет