#include #include #include #include #include #define TAILLE_PIPE 8 // declaration des 8 sempahores a compte. Chacun semaphore i bloquera le thread i et ne sera libere que par le thread i-1. sem_t synchro[TAILLE_PIPE]; int data[TAILLE_PIPE]; void* pipe_element(void* arg) { // A completer : Faire attendre le thread avec la semaphore i . // A completer : Des qu'il est libere par le thread precedent, le thread courant fait son traitement sur la donnee DATA[i] pthread_exit(NULL); } int main() { int i, NB; pthread_t id[TAILLE_PIPE]; // A completer : initialiser les 8 semaphores a comptes. // A completer : Lancer les threads. Chaque thread i fait appel a la fonction pipe_element avec comme argument i // A completer : Liberer le premier semaphore a compte qui traitera data[0]=NB (NB lu au clavier) for(i =0; i< TAILLE_PIPE; i++) { pthread_join(id, NULL); } return 0; }