如何在C中创建2个线程?
问题描述 投票:0回答:1
[当前尝试学习如何实现2个线程,其中一个进行求和,一个进行平均。我已经有了求和函数,平均值就是平均值=(sum / i)。我需要其他功能吗?如果是的话,它应该看起来像求和函数,但平均值=(sum / i)吗?不知道从这里去哪里,所以让我知道还需要做些什么。#include
#include
#include
int sum; /* this data is shared by threads */
void *runner(void *param); /* the thread */
if (argc != 2) {
fprintf(stderr,"usage: a.out \n");
/*exit(1);*/
return -1;
}
if (atoi(argv[1]) < 0) {
fprintf(stderr,"Argument %d must be non-negative\n",atoi(argv[1]));
/*exit(1);*/
return -1;
/* get the default attributes */
pthread_attr_init(&attr);
/* create the thread */
pthread_create(&tid, &attr, runner, argv[1]);
pthread_t tid[2];
/* now wait for the thread to exit */
pthread_join(tid,NULL);
printf("sum = %d\n",sum);
}
/* the thread will begin control in this function */
void *runner(void *param)
{
int i, upper = atoi(param);
sum = 0;
if (upper > 0) {
for (i = 1; i <= upper; i++)
sum += i;
}
pthread_exit(0);
}
c
multithreading
pthreads
1个回答
0
投票
这是一个非常糟糕的练习,因为第二个线程在第一个线程完成之前无法执行任何操作。使用两个线程绝对没有意义。
而且,创建一个仅用于执行除法的线程是浪费的。创建和获取线程要比实际操作花费更多的时间。
以下程序符合您的规格。它使用一个线程求和,而使用另一个线程(预先存在的线程)求平均值。
[当需要传递给/来自线程的所有信息都是整数时,可以将inttype_t或uinttype_t强制转换为void*。#include
#include
#include
#include
#include
uintptr_t sum(uintptr_t i) {
uintptr_t sum = 0;
while (i)
sum += i--;
return sum;
}
void *sum_thread(void *param) {
return (void *)sum((uintptr_t)param);
}
int main(void) {
uintptr_t i = 5;
pthread_t sum_thread_handle;
pthread_create(&sum_thread_handle, NULL, sum_thread, (void *)i);
uintptr_t sum;
pthread_join(sum_thread_handle, (void **)&sum);
printf("sum = %" PRIuPTR "\n", sum);
printf("avg = %lf\n", ((double)sum)/i);
return 0;
}
热门问题