【发布时间】:2016-10-06 15:28:57
【问题描述】:
我的程序本质上应该做的是它接受多个命令行参数并为每个参数创建一个线程。每个线程都分配给一个 primeFactors 函数,该函数返回一个指向素数因子值的指针。
void *primeFactors(void *param)
{
int* p_a = malloc((1000) * sizeof p_a[0]); //arbitrary size, will scale better later
int number = atoi(param);
..... prime factor part .......
p_a[j] = 0; //sentinel value
pthread_exit(p_a);
}
我已经检查过了,事实上,这确实返回了一个指向所有正确素因数的指针。我的主要功能是这样的
int main(int argc, char *argv[])
{
int count = 2; //arbitrary 2 just for the purpose of testing 2 arguments
pthread_t = malloc(count * sizeof(pthread_t));
pthread_attr_t attr;
pthread_attr_init(&attr);
int i;
for (i = 0; i < count; i++)
{
pthread_create(&tid[i], &attr, primeFactors, argv[i+1]);
}
int j;
void *prime_array;
int *p;
for (j = 0; j < count; j++)
{
pthread_join(tid[i], &prime_array);
p = prime_array;
int n = 0;
while (p[n] != 0)
{
printf("%d ", p[n]);
n++;
}
printf("\n");
}
return 0;
}
我只用一个命令行参数检查了这个程序,并且没有围绕 pthread_join 代码的 for 循环,程序可以正常工作。当我加入多个线程并打印每个线程的返回值数组时,似乎出现了问题。当我像我一样使用两个命令行参数运行它时,我得到了一个巨大的数字列表,就好像我运行了一个随机数生成器而不是找到素因子一样。我认为错误可能很小,因此我很感激您提出的任何建议!
【问题讨论】:
标签: c multithreading pthreads