thread_local C++ спецификатор локальной (независимой) переменной в каждом потоке

Спецификатор thread_local позволяет определить переменную которая является независимой и имеет собственное значение в разных потоках


#include <iostream> // cout, endl
#include <thread>   // thread

thread_local int i = 0; // Переменная i будет независимой в каждом потоке

void set_val(int new_val){    // Функция присваивания переменной i нового значения
    i = new_val;
}

void print(){   // Функция вывода значения переменной i из потока
    std::cout << i << std::endl;    // Вывод значения переменной
}

void threadfunc(int id){    // Функция - обработчкик потока
    set_val(id);            // Устанавливаем значение переменной i в потоке
    i *= i;                 // Возводим в квадрат значение переменной i в потоке
    print();                // Выводим значение переменной i в потоке
}

int main(){
    i = 7;                          // Локальная переменная i
    std::thread t1(threadfunc, 2);  // Создаем поток t1 с обработчиком threadfunc и начальным значением i = 1
    std::thread t2(threadfunc, 3);  // Создаем поток t2 с обработчиком threadfunc и начальным значением i = 2
    std::thread t3(threadfunc, 4);  // Создаем поток t3 с обработчиком threadfunc и начальным значением i = 3

    t1.join();                      //4 Запускаем поток t1
    t2.join();                      //9 Запускаем поток t2
    t3.join();                      //16 Запускаем поток t3
    std::cout << i << std::endl;    //7 Вывод значения локальной переменной i. Она не затронута потоками.
}
2023-10-23



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

thread_local C++ спецификатор локальной (независимой) переменной в каждом потоке