10 pthread_cond_t finish_cond = PTHREAD_COND_INITIALIZER;
11 pthread_mutex_t finish_mutex = PTHREAD_MUTEX_INITIALIZER;
13 #ifndef USE_PTHREADS_STACKS
14 #define USE_PTHREADS_STACKS 0
18 #define STACKSIZE 32768
32 printf(
"Using posix threads.\n");
33 pthread_cond_init(&finish_cond, NULL);
34 pthread_mutex_init(&finish_mutex, NULL);
38 thread_wrapper(
void *ptr)
44 pthread_mutex_lock(&finish_mutex);
46 pthread_mutex_unlock(&finish_mutex);
47 pthread_cond_signal(&finish_cond);
58 pthread_attr_t* attr_p = 0;
59 #if USE_PTHREADS_STACKS
62 pthread_attr_init (&attr);
64 st->sp = malloc(STACKSIZE+16);
67 if(pthread_attr_setstacksize(&attr, STACKSIZE))
68 fprintf(stderr,
"error setting stacksize");
70 pthread_attr_setstackaddr(&attr, st->sp + STACKSIZE);
74 return pthread_create(&st->id, attr_p, thread_wrapper, st);
81 wait_for_thread(
struct thread_st st[],
int n_thr,
86 pthread_mutex_lock(&finish_mutex);
89 for(i=0; i<n_thr; i++)
92 if(pthread_join(st[i].
id, NULL) == 0) {
97 fprintf(stderr,
"can't join\n");
102 pthread_cond_wait(&finish_cond, &finish_mutex);
104 pthread_mutex_unlock(&finish_mutex);
Definition: thread-st.h:9