@@ -9,31 +9,28 @@ miniomp_thread_t *miniomp_threads;
9
9
miniomp_parallel_t * miniomp_parallel ;
10
10
11
11
// Declaration of per-thread specific key
12
- pthread_key_t miniomp_specifickey ;
12
+ extern pthread_key_t miniomp_specifickey ;
13
13
14
14
void miniomp_thread_init (miniomp_thread_t * thread , unsigned int id , void (* fn ) (void * ), miniomp_parallel_t * region ){
15
15
thread -> id = id ;
16
16
thread -> region = region ;
17
- pthread_setspecific (miniomp_specifickey , thread );
18
17
pthread_create (& (thread -> pthread ), NULL , fn , thread );
19
18
}
20
19
21
20
22
21
// This is the prototype for the Pthreads starting function
23
22
void worker (void * args ) {
23
+ pthread_key_create (& miniomp_specifickey , NULL );
24
24
miniomp_thread_t * thread = args ;
25
+ pthread_setspecific (miniomp_specifickey , thread );
25
26
miniomp_parallel_t * parallel = thread -> region ;
26
27
int id = thread -> id ;
27
28
printf ("Thread %d initialized\n" , id );
28
29
void (* fn ) (void * ) = parallel -> fn ;
29
30
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 );
31
32
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 );
37
34
}
38
35
39
36
void
@@ -50,6 +47,7 @@ GOMP_parallel (void (*fn) (void *), void *data, unsigned num_threads, unsigned i
50
47
miniomp_thread_init (& miniomp_threads [i ], i , worker , miniomp_parallel );
51
48
}
52
49
for (int i = 0 ; i < num_threads ; i ++ ){
50
+ printf ("Thread %i arrived to join\n" , i );
53
51
pthread_join (miniomp_threads [i ].pthread , NULL );
54
52
}
55
53
free (miniomp_threads );
0 commit comments