Локальна пам'ять нитокЛокальна Пам'ять Потоку (англ. Thread-local storage) — механізм, за допомогою якого в кожному окремому потоці виконання можуть використовуватися власні копії глобальних та статичних змінних. Це буває корисним у деяких випадках, бо всі потоки розділяють одну і ту ж пам'ять свого процесу. Іншими словами, дані, розміщені в статичних чи глобальних змінних, зазвичай завжди розміщені в одному місці, якщо до них звертаються потоки одного процесу. Однак змінні розташовані у стеку є унікальними для потоку, оскільки кожний потік має свій стек, розміщений в окремому блоці пам'яті. Іноді потрібно, щоб два потоки, що звертаються до якоїсь глобальної змінної, насправді звертались до різних місць в пам'яті, таким чином роблячи змінну локальною для потоку. Канонічним прикладом є змінна коду помилки errorno мови C. Реалізація у різних мовах програмуванняC/C++Ключове слово __thread використовується так: __thread int number;
GCCGCC 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 якщо змінна декларується з ключовим словом PythonНа Python версій 2.4 чи пізніших клас local з модуля threading може бути використаний для створення локального сховища потоку. import threading
mydata = threading.local()
mydata.x = 1
Джерела
Посилання
|