首页 > 解决方案 > 错误:线程调用函数时调用不匹配

问题描述

我正在尝试用 C++ 进行生产者/消费者设计,但实际上我被卡住了。我收到这个错误

错误:调用不匹配

'(std::thread) (void (&)())' prods[i]>(producer,i);

当我从循环中调用生产者函数时,这是我的主要内容:

 int main(int argc, char* argv[])
{
 
 std::thread prods[argv[1]];
  for (int i = 0; i <= argc;i++){
    prods[i](producer,i);
    } 

  return 0;
 }

这里是我的生产者功能

  void producer(int i){
  std::unique_lock<std::mutex> lock(m);
  std::cout << "(1) produit 20";
  jobs.push(20);
  notified = true;
  cond_var.notify_one();
  done = true;
  
  }

有人知道如何解决这个问题吗?提前致谢。

标签: c++multithreading

解决方案


线程不可调用,需要显式调用线程构造函数来创建线程:

int main(int argc, char* argv[])
{
    const size_t n = 4;
    std::vector< std::thread > prods( n );
    for (int i = 0; i <= n;i++)
    {
        prods[i] = std::thread(producer,i);
    } 
    return 0;
}

我还用 a 替换了非标准可变长度数组,std::vector并对线程数进行了硬编码,因为您对命令行参数的处理也不正确。


推荐阅读