我有一个作业问题,我目前停留在。问题的参数如下。 1.)它必须接受来自用户的总共5个整数。多个POSIX线程
2.)它必须有三个线程,每个线程执行不同的功能(平均值,最小值和最大值)。
我遇到的问题是在声明全局数组中有5个元素的空数组,然后修改这些元素。每次我最终都会遇到段错误,告诉我我做得不正确。顺便提一句,C语言的着重点不在于C++(我不允许使用它)。如果任何人都可以帮助我理解错误,我将非常感激。另外,如果它是重复的(我看了,我没有看到解决这些问题),请将问题或文章提交给我,谢谢。
代码:
#include <stdio.h>
#include <pthread.h>
void *avgWorker(int in[]);
void *minWorker(int in[]);
void *maxWorker(int in[]);
int main(void)
{
int it, *input;
int in[5];
pthread_t tid1,tid2,tid3;
pthread_attr_t attr1, attr2,attr3;
for (it = 0; it < 5; ++it)
{
printf("Please enter number %d of 5\n", (it + 1));
input[it] = scanf("%d");
}
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
pthread_attr_init(&attr3);
pthread_create(&tid1, &attr1, avgWorker(in), NULL);
pthread_create(&tid2, &attr2, minWorker(in), NULL);
pthread_create(&tid3, &attr3, maxWorker(in), NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
return 0;
}
void *avgWorker(int in[])
{
int total, avg, it;
total = 0;
for (it = 0; it < 5; ++it)
{
total += in[it];
}
avg = 0;
avg = total/5;
printf("\n The average value is: %d. \n", avg);
}
void *minWorker(int in[])
{
int min, it;
min = 99999;
for (it = 0; it < 5; ++it)
{
if (in[it] < min)
min = in[it];
}
printf("The minimum value is: %d\n", min);
}
void *maxWorker(int in[])
{
int max, it;
max = -99999;
for (it = 0; it < 5; ++it)
{
if (in[it] > max)
max = in[it];
}
printf("The maximum value is: %d \n", max);
}
最后,我用gcc编译的代码,并使用-lpthread标志。再次感谢您提供的任何帮助。
是否编译? (每打开一个警告!) –
你应该总是用'-Wall'运行gcc。如果你想要真正干净的代码,可以添加'-Wextra',并且'-Werror'强制你注意它的警告。见[** GCC警告选项**](http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html)我相当肯定你会得到一个错误的'scanf参数数量的警告'。 –
谢谢!我是命令行编译新手,这真的很有帮助。 –