C++ pthread限制线程数

标签 c++ numbers pthreads limits

我尝试使用 pthread 更快地完成一些任务。我有数千个文件(在 args 中)要处理,我只想多次创建少量线程。
这是我的代码:

void callThread(){
    int nbt = 0;
    pthread_t *vp = (pthread_t*)malloc(sizeof(pthread_t)*NBTHREAD);
    for(int i=0;i<args.size();i+=NBTHREAD){
        for(int j=0;j<NBTHREAD;j++){
              if(i+j<args.size()){
                   pthread_create(&vp[j],NULL,calcul,&args[i+j]);   
                   nbt++;
              }
        }
        for(int k=0;k<nbt;k++){
              if(pthread_join(vp[k], NULL)){
                   cout<<"ERROR pthread_join()"<<endl;
              } 
        }
   }
}

它返回错误,我不知道这是否是解决我问题的好方法。所有资源都在 args(结构 vector )中并且是独立的。
感谢您的帮助。

最佳答案

你最好创建一个线程池,线程数与 cpu 的内核数一样多。然后将任务提供给这个池并让它完成它的工作。你应该看看this blog post right here有关如何创建此类线程池的一个很好的示例。

该帖子中未提及的一些提示:

  • 使用 std::thread::hardware_concurrency() 获取内核数。
  • 想办法存储任务,提示:std::packaged_task 或其他东西 这些行包装在一个类中,因此您可以跟踪诸如任务何时完成之类的事情,或者实现 task.join()
  • 另外,可以在 github 上找到他的实现代码以及一些额外的东西,例如 std::future 支持 here .

关于C++ pthread限制线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506165/

相关文章:

python - 如何将字符串拆分为两个数字

c - 为什么使用线程时程序的输出总是不同?

c++ - Visual Studio 中的 std::begin 和 std::end 迭代器

c++ - 测量 ARM Cortex-A15 的缓存访问时间/周期

HTML 到 Excel : How can tell Excel to treat columns as numbers?

mysql - SQL 如何按 "Ranges"排序

c++ - 使用函数的 12 天圣诞节 C++

c++ - 无法在简单程序中按下 QPushButton

PHP线程编译不工作

c - 使用pthread在C中生成随机数的最正确方法是什么