【发布时间】:2012-08-29 09:50:29
【问题描述】:
我有一个被调用数百万次的函数,这个函数所做的工作是多线程的。这是函数:
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_functionsimply 处理一系列数组,thread_data 结构包含指向这些数组的指针和每个线程负责的索引。
尽管以这种方式对算法进行多线程处理确实将性能提高了 20% 以上,但我的分析表明对 pthread_create 的重复调用会导致显着的开销。
我的问题是:有没有办法在每次调用函数时不调用pthread_create 来实现我的目标?
问题已解决。
谢谢你们,非常感谢你们的帮助!我已经使用您的提示编写了解决方案here。
【问题讨论】:
-
你需要看一个线程池的概念。这里有一个线程池,等待工作。你安排这项工作,比如说在一个队列中 - 线程被阻塞,一个线程将拿起工作并执行它。这是一个相当普遍的概念,如果有可能,请从 APR(Apache Portable Runtime)之类的东西中提取此功能。
标签: c multithreading pthreads posix