@@ -9,31 +9,28 @@ miniomp_thread_t *miniomp_threads;
99miniomp_parallel_t * miniomp_parallel ;
1010
1111// Declaration of per-thread specific key
12- pthread_key_t miniomp_specifickey ;
12+ extern pthread_key_t miniomp_specifickey ;
1313
1414void miniomp_thread_init (miniomp_thread_t * thread , unsigned int id , void (* fn ) (void * ), miniomp_parallel_t * region ){
1515 thread -> id = id ;
1616 thread -> region = region ;
17- pthread_setspecific (miniomp_specifickey , thread );
1817 pthread_create (& (thread -> pthread ), NULL , fn , thread );
1918}
2019
2120
2221// This is the prototype for the Pthreads starting function
2322void worker (void * args ) {
23+ pthread_key_create (& miniomp_specifickey , NULL );
2424 miniomp_thread_t * thread = args ;
25+ pthread_setspecific (miniomp_specifickey , thread );
2526 miniomp_parallel_t * parallel = thread -> region ;
2627 int id = thread -> id ;
2728 printf ("Thread %d initialized\n" , id );
2829 void (* fn ) (void * ) = parallel -> fn ;
2930 void * data = parallel -> fn_data ;
30- // printf("Thread %d fn and data done\n", id);
31+ printf ("Thread %d fn and data done\n" , id );
3132 fn (data );
32- //printf("Executed fn in thread %d", id);
33- // insert all necessary code here for:
34- // 1) save thread-specific data
35- // 2) invoke the per-threads instance of function encapsulating the parallel region
36- // 3) exit the function
33+ printf ("Executed fn in thread %d\n" , id );
3734}
3835
3936void
@@ -50,6 +47,7 @@ GOMP_parallel (void (*fn) (void *), void *data, unsigned num_threads, unsigned i
5047 miniomp_thread_init (& miniomp_threads [i ], i , worker , miniomp_parallel );
5148 }
5249 for (int i = 0 ; i < num_threads ; i ++ ){
50+ printf ("Thread %i arrived to join\n" , i );
5351 pthread_join (miniomp_threads [i ].pthread , NULL );
5452 }
5553 free (miniomp_threads );
0 commit comments