您的位置:首页 > 运维架构 > Linux

linux线程5(百度知道上一道题)

2015-09-15 14:31 621 查看
题目:1+2+3+...+30000,在加的过程中,要使用3个多线程完成,并且全部计算好以后,得出最终的和数。

这题比较简单,都没用到条件,感觉互斥锁也可以不用的,但是结果不对,下面是我写的一种实现。

不用互斥锁的话,三个线程相互并发覆盖对方的运行结果,造成错误。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

pthread_mutex_t mutex;       //互斥量

pthread_t tid[3];

void *threadFun(void *arg);        //完成10000个数相加

long result=0;

int main()
{
for(int i=0;i<3;i++)
{
pthread_create(&tid[i],NULL,threadFun,(void*)i);
}
for(int i=0;i<3;i++)
{
pthread_join(tid[i],NULL);
}
printf("%ld\n",result);
return 0;
}

void *threadFun(void *arg)
{
int i;
long index=(long)arg;
for(i=index*10000+1;i<=(index+1)*10000;i++)
{
pthread_mutex_lock(&mutex);
result+=i;
pthread_mutex_unlock(&mutex);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: