在c语言中创建两个线程,c - 如何在C中创建2个线程? - SO中文参考 - www.soinside.com...

如何在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;

}

热门问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值