Копирование данных thread_local-переменной для новых потоков
Всем привет. Мне потребовалось создать уникальный для разных потоков глобальный контейнер. Обратил внимание на thread_local. Однако существует проблема: мне необходимо, чтобы в новом потоке оставались элементы контейнера, добавленные в main потоке, а с thread_local я получаю пустой контейнер в новом потоке. Как мне сохранить данные из main потока для нового потока, чтобы дальше он мог с ними работать?
Приведу пример с глобальной переменной.
Имеем глобальную переменную thread_local int i = 0;, далее в main потоке сделали, к примеру, i = 5;
Затем создали новый поток. Мне необходимо, чтобы в этом новом потоке i == 5,
а не i == 0.
При этом, ни изменения этой переменной из main, ни из нового потока не должны влиять друг на друга (что и обеспечит thread_local)
Ответы (1 шт):
Сделать это несложно, однако требует использования динамической инициализации:
#include <thread>
#include <iostream>
int global{};
thread_local int threaded{global};
void worker()
{
::std::cout << threaded;
}
int main()
{
global = 5;
threaded = global;
::std::thread{&worker}.join();
}