c++ - 错误:线程调用函数时调用不匹配
问题描述
我正在尝试用 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;
}
有人知道如何解决这个问题吗?提前致谢。
解决方案
线程不可调用,需要显式调用线程构造函数来创建线程:
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
并对线程数进行了硬编码,因为您对命令行参数的处理也不正确。
推荐阅读
- eclipse - 无法为 Eclipse 安装 Google Cloud Platform 插件
- asp.net-core-2.0 - 你能在 ASP.NET Core 的 Nlog 目标文件名中使用 ( 和 ) 等字符吗
- python - 与名称中包含空格的名称不匹配 Django Python
- python - 在行和列上加入数据框
- php - Laravel 计费包
- android - 有没有办法在 Xamarin 中手动触发重新索引资源?
- html - 为什么 CSS 直接后代选择器不适用于 Angular 组件
- laravel - Laravel update() 失败时会返回什么异常或错误
- ios - Apple 开发者会员资格到期
- arrays - 基于输入值的打字稿动态过滤器数组