Передача параметра в поток по ссылке или указателю
По умолчанию потоки НЕ работают со ссылками, они используют переменные по значению, что в общем-то логично, т.к. при многопоточности работать с памятью напрямую может быть небезопасно (обращения к одной переменной из разных потоков одновременно), но передать параметр в поток по ссылке можно.
Чтобы передать параметр в поток по ссылке требуется
1- переписать функцию Task2 (из предыдущей темы) на void Task2(string &str)
2-Создать переменную и передать ее, используя функцию ref
string Text="Text";
thread th_2(Task2,std::ref(Text));
По указателю параметр передается и без дополнительной функции, т.к. по сути мы передаем лишь адреса и работаем напрямую.
void Task2(string *str)
{
cout<<"Task_1 ID="<<this_thread::get_id()<<endl;
for (int var = 0; var < 10; ++var)
{
cout<<" >>Task #2 is in progress. Print "<<*str<<" #"<<var<<endl;
this_thread::sleep_for(chrono::milliseconds(200)); //блокирует/переводит текущий поток в режим ожидания на 200мс
}
*str="changed text";
}
в main напишем:
thread th_2(Task2,&Text);
th_2.join();
cout<<Text<<endl;
return 0;