#include #include #include #include #include #include "thread.h" /* test de plein de switch pendant que N-1 threads sont bloqués dans join * * La durée du programme doit etre proportionnelle au nombre de yields * mais ne pas varier avec le nombre de threads donné en argument. * * support nécessaire: * - thread_create() * - thread_yield() depuis ou vers le main * - retour sans thread_exit() * - thread_join() avec récupération de la valeur de retour */ static unsigned long nbthrd; static int nbyield; static void * thfunc(void *_nbth) { int nbth = (intptr_t) _nbth; if ((unsigned long) nbth > 0) { thread_t th; int err; void *res; err = thread_create(&th, thfunc, ((char*)_nbth)-1); assert(!err); err = thread_join(th, &res); assert(!err); assert(res == ((char*)_nbth)-1); } else { int i; struct timeval tv1, tv2; unsigned long us; gettimeofday(&tv1, NULL); for(i=0; i