#include #include #include "thread-test.h" extern int add2(int, int, int); extern int add3(int, int, int, int); static sem_t done; static void *start_routine_2(void *arg) { int x, status; x = add2(40, 2, 100); assert(x == 142); status = sem_post(&done); assert(status == 0); return arg; } static void *start_routine_3(void *arg) { int x, status; x = add3(1000, 200, 30, 4); assert(x == 1234); status = sem_post(&done); assert(status == 0); return arg; } int main(void) { pthread_t th; int i, status = sem_init(&done, 0, 0); assert(status == 0); printf("starting\n"); fflush(stdout); for (i = 0; i < 10; i++) { status = pthread_create(&th, NULL, start_routine_2, NULL); assert(status == 0); status = pthread_create(&th, NULL, start_routine_3, NULL); assert(status == 0); } for (i = 0; i < 20; i++) { status = sem_wait(&done); assert(status == 0); } printf("done\n"); fflush(stdout); /* this is occasionally needed on Windows */ return 0; }