【发布时间】:2021-08-03 10:16:58
【问题描述】:
这个主函数的目标是找到一个范围内的素数数量,使用线程将问题划分为选定数量的线程。我遇到了 std::thread 问题,并且由于参数而出现错误。我不确定如何解决它。任何帮助将不胜感激。
这是错误:
错误:没有匹配函数调用 'std::thread::thread(void (&)(int, int, int*, int), int&, int&, int [numThreads], int&)' std:: thread* th = new std::thread(myRun, minThread, maxThread, threadCount, i);
代码如下:
#include <iostream>
#include <thread>
static int isPrime(int n);
static int primesInRange(int min, int max);
void myRun(int min, int max, int* threads, int index);
int main()
{
int min = 0;
int max = 3;
int numThreads = 1;
std::thread* ths[numThreads];
int threadCount[numThreads];
int minThread = 0;
int maxThread = 0;
int formerMax = 0;
for (int i = 0; i < numThreads; i++)
{
if (i == 0)
{
minThread = min;
maxThread = min + (max - min)/numThreads;
formerMax = maxThread;
}
else
{
minThread = formerMax + 1;
maxThread = minThread + (max - min)/numThreads;
formerMax = maxThread;
}
if (maxThread > max)
{
maxThread = max;
}
std::thread* th = new std::thread(myRun, minThread, maxThread, threadCount, i);
ths[i] = th;
}
}
void myRun(int min, int max, int* threads, int index)
{
threads[index] = primesInRange(min, max);
}
【问题讨论】:
-
有时您必须使用 明确指定模板化函数。我也想知道如果你转换 args 编译器是否会选择它......
-
这对我和compiles in gcc 来说都不错 - 您使用的是哪个编译器(包括版本)?
-
不可重现 ideone.com/FdNCcH 请编辑您的问题以包含 minimal reproducible example
-
@KenY-N MinGW gcc 8.1.0
-
@Slava 我已经更新了我的帖子,对此感到抱歉。
标签: c++ multithreading stdthread