C Programming Tutorial

 
 
 
 

Image

/*    
      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]