У меня есть функция, которую я хочу запускать в разных потоках. Функция заполняет структуру данных, например:сигнализация родительских потоков в C++ 11
per_thread(int start_value, std::vector<SomeStruct>& reference)
{
for (size_t i = 0; i < 500; i++)
{
reference.push_back(func(i));
if (i == 2)
send_signal_back();
}
}
Однако, после того, как это делается происходит через петлю некоторое число раз, я хочу, чтобы начать другую нить, используя это в качестве начального значения. К сожалению, я не понимаю, как отправить сигнал обратно в родительский поток.
Так что я хочу что-то вроде этого:
for(size_t j = 0; j < 5000; j += num_threads)
{
for (size_t i = 0; i < num_threads; i++)
{
std::async(per_thread(foo(j+i), std::ref(vec));
//wait for signal
}
}
Как послать такой сигнал?
Между потоками нет отношения «родитель-ребенок». Нити - это просто потоки. Может быть, вы думаете о процессах? –
@KerrekSB: Не существует принудительных отношений между родителями и дочерними элементами, но какой-то поток создает другой поток (кроме основного потока), поэтому в этом смысле отношения родитель-ребенок. Я не думаю о процессах, по крайней мере, не настолько, насколько я понимаю. Я все еще новичок в параллелизме в целом. –
Как насчет некоторой [переменной условия] (http://en.cppreference.com/w/cpp/thread/condition_variable)? –