Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <pthread.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <time.h>
- #define nt 5
- #define N 4
- void* master_fun (void *threadarg);
- void* slave_fun (void *threadarg);
- int dot_prod(int x[], int y[]);
- pthread_mutex_t lock_s;
- int V1[N];
- int V2[N];
- int master_flag=0;
- int main(int argc, char* argv[])
- {
- srand(time(NULL));
- pthread_t threads[nt];
- unsigned int id[nt];
- int rc,t;
- //semaphores declaration out of main
- if(pthread_mutex_init(&lock_s, NULL) != 0)
- {
- return 1;
- }
- //CREATION THREADS
- for(t=0;t<nt;t++)
- {
- printf("In main thread#%d are being created : id--> ",t);
- if(t==4)
- {
- rc=pthread_create(&threads[t], NULL, master_fun,(void*) &t);
- printf("(%u)",t);
- }
- else
- {
- rc=pthread_create(&threads[t], NULL, slave_fun, (void*) &t);
- printf("(%u)",t);
- }
- printf("\n");
- if(rc)
- {
- printf("Error; return %d as value of error\n", rc);
- return(-1);
- }
- }
- //WAIT THREADS TO EXECUTE
- for(t=0;t<nt;t++)
- {
- rc=pthread_join(threads[t], NULL);
- if(rc)
- {
- printf("Error; return %d as value of error\n", rc);
- return(-1);
- }
- }
- pthread_mutex_destroy(&lock_s);
- }
- void* master_fun(void *threadarg)
- {
- int i;
- for(i=0;i<N;i++)
- {
- V1[i]=rand()%20-10;
- V2[i]=rand()%20-10;
- printf("\n--/%d/--\n",V1[i]);
- printf("\n--/%d/--\n",V2[i]);
- }
- master_flag=1;
- pthread_exit(NULL);
- }
- void* slave_fun (void *threadarg)
- {
- int PS,i;
- int a1[N/4],a2[N/4];
- pthread_mutex_lock(&lock_s);
- while(master_flag==0)
- ;
- //dot product
- if((*(int*)threadarg)==0)
- {
- for(i=0;i<N/4;i++)
- a1[i]=V1[i];
- a2[i]=V2[i];
- PS=dot_prod(a1,a2);
- printf("\nprod_scal di mamt #1: %d\n",PS);
- }
- if((*(int*)threadarg)==1)
- {
- for(i=0;i<N/4;i++)
- a1[i]=V1[i];
- a2[i]=V2[i];
- PS=dot_prod(a1,a2);
- printf("\nprod_scal di mamt #2: %d\n",PS);
- }
- if((*(int*)threadarg)==2)
- {
- for(i=0;i<N/4;i++)
- a1[i]=V1[i];
- a2[i]=V2[i];
- PS=dot_prod(a1,a2);
- printf("\nprod_scal di mamt #3: %d\n",PS);
- }
- if((*(int*)threadarg)==3)
- {
- for(i=0;i<N/4;i++)
- a1[i]=V1[i];
- a2[i]=V2[i];
- PS=dot_prod(a1,a2);
- printf("\nprod_scal di mamt #4: %d\n",PS);
- }
- pthread_mutex_unlock(&lock_s);
- pthread_exit(NULL);
- }
- int dot_prod(int x[], int y[])
- {
- int P,i;
- P=0;
- for(i=0; i<N/4;i++)
- {
- P=P+x[i]*y[i];
- }
- return P;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement