У меня есть N задач, которые независимы (например, пишут по разным адресам памяти), но не занимают ровно одно и то же время (скажем, от 2 до 10 секунд).У меня есть P потоков.
Я могу разделить свои N задач на P потоков и запускать свои.В конце концов, в конце остается один поток для выполнения нескольких последних задач, что не является оптимальным.
Я также могу запускать P потоков с 1 задачей каждый, WaitForMultipleObjects, а также повторно запускать P потоков и т. Д.(это то, что я сейчас делаю, поскольку накладные расходы на создание потоков невелики по сравнению с задачей).Однако это также не решает проблему, в какой-то момент потоки P-1 все еще будут ожидать последнего.
Есть ли способ запустить потоки, и как только поток завершит свою работу?задача, перейти к следующей доступной задаче, пока все задачи не будут выполнены?
Спасибо!