#include #include #include #include #include #include #include #include "thread.h" /* test de faire une somme avec plein de thread sur un compteur partagé * * valgrind doit etre content. * Les résultats doivent etre égals au nombre de threads * 1000. * La durée du programme doit etre proportionnelle au nombre de threads donnés en argument. * * support nécessaire: * - thread_create() * - retour sans thread_exit() * - thread_join() sans récupération de la valeur de retour * - thread_mutex_init() * - thread_mutex_destroy() * - thread_mutex_lock() * - thread_mutex_unloc() */ #define NB_MUTEX 10 int counter[NB_MUTEX] = { 0 }; thread_mutex_t lock[NB_MUTEX]; static void * thfunc(void *_nb) { unsigned long nb = (unsigned long) _nb; unsigned long i = 0; int tmp; int m = nb % NB_MUTEX; for(i=0; i<1000;i++) { /* Verrouille la section critique accédant a counter */ thread_mutex_lock(&lock[m]); tmp = counter[m]; thread_yield(); tmp++; thread_yield(); counter[m] = tmp; thread_mutex_unlock(&lock[m]); } return NULL; } int main(int argc, char *argv[]) { thread_t *th; int i, nbthrd; int err, nb; struct timeval tv1, tv2; unsigned long us; if (argc < 2) { printf("argument manquant: nombre de threads\n"); return -1; } nb = atoi(argv[1]); nbthrd = nb * NB_MUTEX; for(i=0; i