#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<pthread.h>
#define NMAX 10000
#define thno 100
double ans;
struct prodcons
{
pthread_mutex_t lock;
int pos;
double final;
};
void init(struct prodcons* b)
{
pthread_mutex_init(&b->lock,NULL);
b->pos=0;
b->final=0;
}
int cal(struct prodcons* b)
{
pthread_mutex_lock(&b->lock);
//printf("Output1-->%d\n",b->pos);
double temp1=(b->pos+0.5)/NMAX;
double temp2=(1+temp1*temp1)*NMAX;
double res=4/temp2;
//printf("OutputR-->%f\n",res);
b->final+=res;
b->pos++;
ans=b->final;
printf("Output2-->%f\n",ans);
pthread_mutex_unlock(&b->lock);
return res;
}
struct prodcons buffer;
void * cacluer(void * data)
{
int n;
for(n=0;n<(NMAX/thno);n++)
{
cal(&buffer);
//printf("Output3-->%d\n",n);
}
return NULL;
}
int main()
{
time_t start,end;
time(&start);
pthread_t a_thread[thno];
void * retval;
init(&buffer);
int k;
for(k=0;k<thno;k++){
pthread_create(&a_thread[k],NULL,cacluer,0);
//printf("Output-->%d\n",k);
}
int l;
for(l=0;l<thno;l++){
pthread_join(a_thread[l],&retval);
//printf("Output-->%d\n",l);
}
time(&end);
printf("EndTime %f\n",difftime(end,start));
return 0;
}