线程对commad行上输入的数字列表执行统计计算?
我正在尝试编写一个多线程程序,从命令行获取一系列数字,并使用单独的工作线程计算各种统计值,如平均值、总和等。我在这个程序中创建了三个线程,它可以编译,但是我得到了错误。我是C和线程编程新手,请指导我将数据传递到线程进行计算? 这是我的代码:线程对commad行上输入的数字列表执行统计计算?,c,multithreading,C,Multithreading,我正在尝试编写一个多线程程序,从命令行获取一系列数字,并使用单独的工作线程计算各种统计值,如平均值、总和等。我在这个程序中创建了三个线程,它可以编译,但是我得到了错误。我是C和线程编程新手,请指导我将数据传递到线程进行计算? 这是我的代码: #include<stdio.h> #include<string.h> #include<pthread.h> #include<stdlib.h> #include<unistd.h> #de
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#define NUM_THREAD 3
int average, min, max;
void *
doSomeThing(void *param)
{
//int *id_ptr, taskid;
int *argv = (int *) param;
sleep(1);
//id_ptr=(int *) threadid;
//taskid= *id_ptr;
int j;
int sum = 0;
int upper = atoi(param);
sleep(1);
pthread_t id = pthread_self();
unsigned long i = 0;
if (id = 1) {
int i;
for (i = 0; i < upper; i++) {
sum += argv[i];
}
printf("sum of no's is :\n", sum);
}
if (id = 2) {
printf("\n Second thread processing\n");
}
if (id = 3) {
printf("\n Third thread processing\n");
}
for (i = 0; i < -1; i++);
{
pthread_exit(NULL);
}
}
int
main(int argc, char *argv[])
{
pthread_t threads[NUM_THREAD];
pthread_attr_t attr;
int *taskid[NUM_THREAD];
int i = 0;
int t;
int err;
//int input,a;
if (argc != 2) {
fprintf(stderr, "usage: a.out <integer value>\n");
return -1;
}
/*
printf("how many no's do u want to evaluate?:\n");
scanf("%d", &input);
printf("Enter the no's:\n");
for (a = 0; a < input; a++) {
arr[a] = (int) malloc(sizeof(int));
scanf("%d", &arr[a]);
printf("data:", &arr[a]);
}
*/
pthread_attr_init(&attr);
for (t = 0; t < NUM_THREAD; t++) {
taskid[t] = (int *) malloc(sizeof(int));
*taskid[t] = t;
printf("In main: creating thread %d\n", t);
err = pthread_create(&threads[t], &attr, doSomeThing, argv[1]);
if (err) {
printf("Error; return code from pthread_create() is %d\n",
err);
exit(-1);
}
}
for (t = 0; t < NUM_THREAD; t++) {
pthread_join(threads[t], NULL);
printf("Joining thread %d\n", t);
}
pthread_exit(NULL);
}
#包括
#包括
#包括
#包括
#包括
#定义NUM_线程3
整数平均值,最小值,最大值;
空虚*
剂量测量(无效*参数)
{
//int*id_ptr,任务id;
int*argv=(int*)参数;
睡眠(1);
//id_ptr=(int*)线程id;
//taskid=*id\u ptr;
int j;
整数和=0;
int upper=atoi(参数);
睡眠(1);
pthread_t id=pthread_self();
无符号长i=0;
如果(id=1){
int i;
对于(i=0;i
是什么让你认为pthread\u create
分配了一个很好的小数字,比如1、2、3作为线程id?调用pthread\u self()
时,不太可能得到1、2或3。此外,您最终应该释放从malloc
获得的内存
我的建议是为average、max和min编写一个单独的函数,并调用pthread_create显式三次传入这三个单独的函数,而不是使用一个函数来完成所有操作。这里的格式太糟糕了。欢迎使用堆栈溢出。请看这一页。很难读取缩进严重的代码;请确保代码正确缩进。不要使用标签;将它们替换为(推荐的四个)空格。请详细解释您遇到的错误,并提供一个SSCCE(),以便人们能够更容易地重现您看到的问题。输入数据和其他代码(例如启动线程的main()
)可能也会相关……哦……main()
在里面,缩进大约5级深!噢是什么让您认为pthread_create会分配一个很好的小数字,比如1、2、3作为线程id?调用pthread\u self()
时,不太可能得到1、2或3。你也应该最终释放你从malloc
获得的内存。我希望教授们等到学生成为有能力的程序员后再教他们线程。或者至少有一个不错的硬件视角。但我想这需要几年的时间,而且他们没有这样的时间。我会在匆忙中清洗,我会尝试正确地缩进代码。但是,谢谢你的帮助,是的,我真的很努力与线程。我将初始化任务id,但如何将用户输入传递给线程进行计算?