Есть ли способ повторно использовать pthreads?
У меня есть функция, которая вызывается миллионы раз, и работа, выполняемая этой функцией, является многопоточной. Вот функция:
void functionCalledSoManyTimes()
{
for (int i = 0; i < NUM_OF_THREADS; i++)
{
pthread_create(&threads[i], &attr, thread_work_function, (void *)&thread_data[i]);
}
// wait
}
Я создаю потоки каждый раз, когда вызывается функция, и я даю каждому потоку свою структуру данных (которая была установлена один раз в начале алгоритма) для использования вthread_work_function
,thread_work_function
просто обрабатывает ряд массивов, иthread_data
Структура содержит указатели на эти массивы и индексы, за которые отвечает каждый поток.
Хотя многопоточность алгоритма таким способом действительно улучшила производительность более чем на 20%, мое профилирование показывает, что повторяющиеся вызовы pthread_create вызывают значительные накладные расходы.
Мой вопрос: есть ли способ достичь моей цели без звонкаpthread_create
каждый раз функция вызывается?
Problem Solved.
Спасибо, ребята, я очень ценю вашу помощь! Я написал решениеВот используя ваши советы.