#include<stdio.h> #include \"headfork.h\" #include \"headshr.h\" #include \"headsem.h\" main() { int a1[5][5],a2[5][5],x[10],y[10],i,j,n,id; int *semid,**result; int np,mmax,shmid,shmid1; int m=0; printf(\"Enter the limit : \"); scanf(\"%d\",&n); printf(\"Enter the elements of arr1 :\\n\"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf(\"a[%d][%d] : \",i,j); scanf(\"%d\",&a1[i][j]); } } printf(\"Enter the elements of arr2 :\\n\"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf(\"a[%d][%d] : \",i,j); scanf(\"%d\",&a2[i][j]); } } printf(\"Enter the no.of proc. : \"); scanf(\"%d\",&np); result=(int **)shared(20,&shmid); semid=(int *)shared(40,&shmid1); for(i=0;i<n;i++) lock_init(&semid[i]); for(i=0;i<n;i++) { for(j=0;j<n;j++) { x[m]=i; y[m]=j; m++; } } mmax=m-1; id=p_fork(np); for(m=id;m<=mmax;m+=np) { i=x[m]; j=y[m]; locksem(&semid[i]); result[i][j]+=a1[i][j] * a2[i][j]; unlock(&semid[i]); } p_join(np,id); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf(\"%d\\t\",result[i][j]); printf(\"\\n\"); } }