Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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");
}
Ejemplo n.º 3
0
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);
}