У меня есть функция, которая заполняет записи в большой матрице. Поскольку вычисления независимы, я думал об использовании std::thread
, так что куски матрицы могут обрабатываться отдельными потоками.Создайте набор потоков итеративно в C++ 11?
Вместо разделения матрицы, чтобы n
куски, где n
является ограничение на максимальное количество потоков, разрешенных для запуска одновременно, я хотел бы сделать более тонкие куски, так что я мог бы породить новый поток, когда существующий поток законченный. (Поскольку время вычисления будет сильно отличаться для разных записей, и одинаковое разделение матрицы здесь будет не очень эффективным. Следовательно, последняя идея.)
Каковы концепции в std :: thread Я должен изучить это? (Я наткнулся на async
и condition_variables
, хотя я не ясно вижу, как их можно использовать для таких видов нереста). Некоторый пример псевдо-кода очень поможет!
'Я мог бы порождать новый поток, когда существующий поток завершен.' Почему? Какой смысл позволить одному потоку умереть только, чтобы немедленно создать другой, когда существующий может сделать больше работы так же хорошо? Создайте очередь рабочих элементов, создайте пул рабочих потоков, выберите элементы из этой очереди и обработайте их. –
Это имеет смысл! Благодаря! – mskb