Пример #1
0
TEST(MutexTest,IncControl)
{ Thread *pool[100];
  int i,N=100;
	counter c;
  init_counter(&c);
  EXPECT_EQ(c.n,0);
  for(i=0;i<N;++i)
  { pool[i] = Thread_Alloc(inc_ctl,(void*)&c); // <50ms>*100 = 5s
    ASSERT_NE(pool[i],(void*)NULL);
  }
  for(i=0;i<N;++i)
    Thread_Join(pool[i]);
  for(i=0;i<N;++i)
    Thread_Free(pool[i]);
  EXPECT_NE(c.n,N);
  Mutex_Free(c.lock);
}
Пример #2
0
/**
 ****************************************************
 * \fn void TPOS_Init(void) 
 ****************************************************
 */
void 
TPOS_Init(void) 
{
	Thread *th;
	uint16_t i;

	Thread_Current()->next = NULL;
	EV_Init(&Thread_Current()->wakeEvent,TPos_ThreadWake,Thread_Current());
	for(i = 1; i < THREAD_POOL_SIZE; i++) {
		th = Thread_Alloc();		
		Thread_Init(th,EV_Loop);
		th->next = unusedqHead;		
		unusedqHead = th;
		EV_Init(&th->wakeEvent,TPos_ThreadWake,th);
	}
	Mutex_Init(&testRSema);
}
Пример #3
0
int main(int argc,char* argv[])
{ Chan *chan;
  Thread*  threads[N];
  input_t  inputs[N];

  stop=0;
  item=0;

  chan = Chan_Alloc(16,sizeof(int));

  stop=0;
  { size_t i;
    ThreadProc procs[N] = { 
      consumer,
      consumer,
      consumer,
      consumer,
      producer,
      producer,
      producer,
      producer,
      producer,
    };
    for(i=0;i<N;++i)
    { inputs[i].id   = i;
      inputs[i].chan = chan;
    }
    for(i=0;i<N;++i)
    { threads[i] = Thread_Alloc(procs[i],(void*)(inputs+i));
      usleep(10);
    }
  }

  //usleep(100);
  Chan_Wait_For_Ref_Count(chan,N+1);
  stop=1;
  printf("*** Main: triggered stop ***"ENDL);
  { int i=0;
    for(i=0;i<N;++i)
      Thread_Join(threads[i]);
  }
  Chan_Close(chan);
  printf("Balance: (%d,%d) %s"ENDL,pmax,cmax,(pmax==cmax)?"Ok!":"Mismatch *****");
  return 0;
}
Пример #4
0
 virtual void SetUp()
 { pause1_   = Thread_Alloc(pause_100ms,NULL);
   fortytwo_ = Thread_Alloc(pause_100ms,(void*)42);
 }