我有一个被称为数百万次的函数,并且此函数完成的工作是多线程的。这是函数:

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来实现我的目标?

问题已解决。

谢谢大家,我非常感谢您的帮助!我已经根据您的提示写了一个解决方案here

最佳答案

只需启动一组固定的线程并使用线程间通信系统(例如,环形缓冲区)将数据传递给进程即可。

关于c - 有没有一种方法可以重用pthread?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12268514/

10-10 10:43