/* * Programme simulant la gestion d'une imprimante * * Creation/Destruction de threads * */ #include #include #include #include #include #include #define NBMAXTHREADS 100 #define NOMFICHIERMAX 80 void impression(char *nomFic){ printf("Debut d'impression de \"%s\"...\n", nomFic); sleep(5); /* Simule la lenteur de l'impression */ printf("...Fin d'impression de \"%s\"...\n", nomFic); } void *imprimeur(void *args) { char *nomFic; nomFic = (char *)args; impression(nomFic); free(nomFic); pthread_exit(NULL); } int main(){ int i; pthread_t threadTab[NBMAXTHREADS]; int nbThreads = 0; do { int retcode; char *nomFic; nomFic = malloc(NOMFICHIERMAX * sizeof(char)); if (nomFic == NULL) { perror("malloc"); exit(EXIT_FAILURE); } printf("Nom du fichier a imprimer (taper '0' pour terminer) ? "); scanf("%s", nomFic); if (strcmp(nomFic,"0") == 0) { break; } retcode = pthread_create(&(threadTab[nbThreads]), NULL, imprimeur, nomFic); if (retcode != 0) { perror("pthread_create"); exit(EXIT_FAILURE); } nbThreads ++; } while (nbThreads < NBMAXTHREADS); printf("Au revoir\n"); for (i = 0; i < nbThreads; i ++) pthread_join(threadTab[i], NULL); return EXIT_SUCCESS; }