gpt4 book ai didi

c - 线程对命令行输入的数字列表执行统计计算?

转载 作者:行者123 更新时间:2023-11-30 17:46:23 25 4
gpt4 key购买 nike

我正在尝试编写一个多线程程序,该程序从命令行获取数字列表,并使用单独的工作线程计算各种统计值,例如平均值、总和等。我在这个程序中创建了三个线程,它可以编译,但出现错误。我是 C 和线程编程的新手,请指导我将数据传递到线程进行计算?这是我的代码:

#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);
}

最佳答案

是什么让您认为 pthread_create 分配了一个漂亮的小数字(如 1、2、3)作为 thread_id?当您调用 pthread_self() 时,您不太可能得到 1、2 或 3。此外,您最终应该释放malloc< 获得的内存.

我的建议是,您为平均值、最大值和最小值编写一个单独的函数,并显式调用 pthread_create 3 次,传入 3 个单独的函数,而不是使用一个函数来完成所有操作。

关于c - 线程对命令行输入的数字列表执行统计计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com