#include<stdio.h>
#include "headfork.h"
#include "headshr.h"
#include "headbar.h"
main()
{
int x[10],y[10],n,id,i,nproc;
int sid1,sid2,sid3,sid4,sid5,sid6,sid7,*lock,*bar;
float *dx,*dy,*meanx,*meany,*dxdy,sumx,sumy,cr;
bar=(int *)shared(sizeof(int)*2,&sid1);
dx=(float *)shared(sizeof(float)*2,&sid2);
dy=(float *)shared(sizeof(float)*2,&sid3);
meanx=(float *)shared(sizeof(float)*2,&sid4);
meany=(float *)shared(sizeof(float)*2,&sid5);
dxdy=(float *)shared(sizeof(float)*2,&sid6);
lock=(int *)shared(sizeof(int)*2,&sid7);
printf("Enter the limit : ");
scanf("%d",&n);
printf("Enter the elements of X : ");
for(i=0;i<n;i++)
{
printf("\nx[%d] : ",i);
scanf("%d",&x[i]);
}
printf("\nEnter the elements of Y : ");
for(i=0;i<n;i++)
{
printf("\ny[%d] : ",i);
scanf("%d",&y[i]);
}
printf("Enter the no.of proc :");
scanf("%d",&nproc);
bar=bar_init(nproc);
lock_init(lock);
cr=0.0;
*meanx=0.0;
*meany=0.0;
id=p_fork(nproc);
sumx=0.0;
sumy=0.0;
for(i=id;i<n;i+=nproc)
{
sumx+=x[i];
sumy+=y[i];
}
locksem(lock);
*meanx+=sumx/(float)n;
*meany+=sumy/(float)n;
unlock(lock);
barrier(bar);
for(i=id;i<n;i+=nproc)
{
dx[i]=x[i] - *meanx;
dy[i]=y[i] - *meany;
}
for(i=id;i<n;i+=nproc)
{
dxdy[i]=*(dx+i) * *(dy+i);
}
p_join(nproc,id);
for(i=0;i<n;i++)
cr += *(dxdy+i);
printf("\nThe Correlation is : %f",cr);
}
OUTPUT
knoppix@ttyp0[pp]$ cc correl_bar.c
knoppix@ttyp0[pp]$ ./a.out
Enter the limit : 5
Enter the elements of X :
x[0] : 11
x[1] : 12
x[2] : 13
x[3] : 14
x[4] : 15
Enter the elements of Y :
y[0] : 1
y[1] : 2
y[2] : 3
y[3] : 4
y[4] : 5
Enter the no.of proc :3
The Correlation is : 10.000001