#include #include #include #include #include "LinkedList.h" #define NBVAL 200 #define NBTHREAD 100 LinkedList *l = NULL; pthread_barrier_t barrier; void *addRemove(void *arg) { int i; pthread_barrier_wait(&barrier); for (i = 0 ; i < NBVAL ; ++i) { addLL(l, i/2); sched_yield(); } for (i = NBVAL-1 ; i >= 0 ; --i) { removeLL(l, i/2); sched_yield(); } return NULL; } int main() { int i, rc; pthread_t thread[NBTHREAD]; l = newLL(); rc = pthread_barrier_init(&barrier, NULL, NBTHREAD); for (i = 0 ; i < NBTHREAD ; ++i) { rc = pthread_create(&thread[i], NULL, addRemove, NULL); assert(rc == 0); } for (i = 0 ; i < NBTHREAD ; ++i) { rc = pthread_join(thread[i], NULL); assert(rc == 0); } // Analyse du resultat du test if (sizeLL(l) != 0) { printf("Test KO (la liste finale contient %d elements au lieu de 0 !)\n", sizeLL(l)); dumpLL(l); return EXIT_FAILURE; } rc = pthread_barrier_destroy(&barrier); assert(rc == 0); freeLL(l); printf("Test OK (la liste finale est vide)\n"); return EXIT_SUCCESS; }