C ++ Можно ли оставить pthread (Windows) открытым для многократного запуска функции?

В настоящее время я тестирую pthreads для использования, чтобы ускорить другой код, который у меня есть. По сути, мой код в настоящее время представляет собой пару циклов for, которые в итоге выполняют матричные вычисления. Я попробовал порождать потоки, которые будут выполнять эти вычисления одновременно, и в итоге время выполнения сократилось вдвое.

Мой вопрос заключается в том, есть ли способ изначально порождать эти pthreads, заставить их запускать функцию и использовать их позже, чтобы запустить ту же функцию без их закрытия? Или нужно закрыть их после выполнения задания?

Кстати, я использую Windows, использую библиотеку pthreads.

0

Решение

Вы могли бы создать queue задач, которые ваши потоки будут выбирать для новых задач и удалять из них, если таковые имеются (и желательно какой-нибудь флаг отмены, чтобы изящно остановить их).

Вам нужно сделать добавление задач поточно-ориентированным, например, используя pthread_mutex.

Вы также можете использовать условную переменную (pthread_cond_t) сигнализировать, когда есть еще задачи для cunsume

Таким образом, вы можете создавать столько потоков, сколько пожелаете в начале, и просто добавлять задачи, когда это необходимо.


Как примечание вы, вероятно, предпочтете менее громоздкие threadсоставление стандартной библиотеки.

2

Другие решения

Почему бы не использовать полноценные библиотеки параллельной обработки или языковые расширения, такие как , , . Все они теперь вполне переносимы, имеют поддержку основных ОС и компиляторов. Microsoft также имеет который является близнецом TBB.

Таким образом, вам не нужно изобретать колесо, а позволить библиотекам позаботиться о потоках и распределении нагрузки; и защитит вас от таких ловушек: Почему OpenMP превосходит потоки?

Например, вектор задач может быть запущен параллельно по умолчанию числом потоков так же просто, как (в cilk):

cilk_for(int i = 0; i < tasks.size(); i++)
task[i].some_function();

Вы также можете изменить количество потоков, если это необходимо.

0

По вопросам рекламы [email protected]