/* Sum of the elements of the array by loop splitting ; each process adds its partial sum to the final sum (the overhead on the parent is removed) */ # include <stdio.h> # include </usr/include/sys/types.h> # include </usr/include/sys/shm.h> # include </usr/include/sys/ipc.h> # include </usr/include/sys/sem.h> # include \"sharedlib.h\" // included in zip # include \"forkjoin.h\" // included in zip # include \"spinlock.h\" // included in zip # define NPROC 5 int main() { int arr[10]={1,2,3,4,5,6,7,8,9,10}; int *FinalSum; int id; int iCount; int shmid; int parsum[NPROC]; int *lock,shmidlock; FinalSum=(int*)sshared(sizeof(int) * NPROC,&shmid); lock=(int *)sshared(sizeof(int),&shmidlock); *FinalSum=0; spin_lock_init(lock); id=process_fork(NPROC); parsum[id]=0; for(iCount=id;iCount<10;iCount=iCount+NPROC) { parsum[id]=parsum[id] + arr[iCount]; } printf(\"\\nPartial Sum is of Process: %d is %d\",id,parsum[id]); spin_lock(lock); *FinalSum=*FinalSum +parsum[id]; spin_unlock(lock); process_join(NPROC,id); printf(\"\\nFinal Sum is : %d \\n\",*FinalSum); cleanup_memory(&shmid); cleanup_memory(&shmidlock); return 0; } [/Code]