题目: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);
}
}