void test2(int dummy) { int i; for(i = 0; i < 5; i++) { dccthread_t *t1 = dccthread_create("t1", f1, 0); dccthread_t *t2 = dccthread_create("t2", f1, 0); dccthread_wait(t1); dccthread_wait(t2); } dccthread_exit(); }
void dccthread_init(void (*func)(int), int param) { THREAD_QUEUE_FINAL_POS=0; current_thread=-1; memset(thread_ready_queue, 0, sizeof(dccthread_t *) * THREAD_QUEUE_SIZE); getcontext(&manager); getcontext(&principal); manager.uc_link = NULL; setStackProperties(&manager); principal.uc_link = &manager; setStackProperties(&principal); makecontext(&principal, nextThread, 0); dccthread_create("Main", func, param); printf("Swapping Manager -> Principal\n"); setcontext(&principal); printf("UE, voltou?\n"); }
void dccthread_init(void (*func)(int), int param) { init_timer(); THREAD_QUEUE_FINAL_POS=neueId=0; current_thread=-1; memset(thread_ready_queue, 0, sizeof(dccthread_t *) * THREAD_QUEUE_SIZE); getcontext(&manager); getcontext(&exiter); manager.uc_link = &exiter; setStackProperties(&manager); setStackProperties(&exiter); makecontext(&manager, nextThread, 0); dccthread_create("Main", func, param); swapcontext(&exiter, &manager); exit(EXIT_SUCCESS); }