Формирую задачу, которая будет выполняться в нескольких потоках с помощью stl следующим образом:
// подготовить данные
CTasksData tasksData;
// запустить потоки
std::mutex lock;
std::vector<std::thread> threads;
for (int threadIndex = 0; threadIndex < threadsAmount; threadIndex++)
{
threads.push_back(std::thread(&taskFunc, std::ref(lock), &tasksData));
}
// дождаться завершения потоков
for (auto& thread : threads)
{
if (thread.joinable())
thread.join();
}
Подскажите как корректно сделать следующее:
как только один из потоков завершается, то и все остальные потоки (не важно на каком этапе они были) прекращают выполняться
Я реализовал это через специальный флаг в CTasksData
и потоки постоянно проверяют, установлен ли он
for ()
{
// проверка флага
// основной функционал
}
Недостаток такого подхода в том, что пока выполняется основной функционал, проверки не будет (хотя это и происходит быстро)
Да и когда я стал смотреть как загружены ядра, то у меня сложилось впечатление, что потоки как-то неохотно отпускаются.
Вот и хотелось бы, чтобы как только один из потоков прекращал выполнение, остальные сразу дохли бы... но корректно
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть задание на написание программы, которая обрабатывает текстовый файл со строками такого вида:
Можно объявить функцию так, чтобы узнать возвращаемый тип по типу возвращаемого выражения:
Какое поведение следует ожидать при запуске MPI программы без mpiexec/mpirun, но скомпилированной с помощью MPI компилятора? Специфицировано ли оно...
Создал линейный список и заполнил числами от 0 до 10Как удалить элемент списка, значение которого равно 5? Пожалуйста, подскажите