我有一个被调用了数百万次的函数,这个函数的工作是多线程的。以下是该函数:
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的情况下实现我的目标?
问题已解决。
谢谢大家,非常感谢你们的帮助! 我用你们的技巧写了一个解决方案,请参见此处。