URL: https://linuxfr.org/forums/programmation-c--2/posts/s%C3%A9maphore-systemv Title: Sémaphore SystemV... Authors: ploum Date: 2004年08月10日T21:27:43+02:00 Tags: Score: 0 Bonjour, Mon programme C est confronté à un problème typique de readers/writers devant accéder à la même ressource. J'utilise donc les sémaphores et j'en crée deux dans le main : _ semid = semget (IPC_PRIVATE, 2, 0666); if (semid < 0) { perror("semget planté"); exit(EXIT_FAILURE); } up(0); up(1); _ La fonction up est _ int up(int sem_nbr) { struct sembuf buf; buf.sem_num = sem_nbr; buf.sem_op = 1; if ((semop(semid, &buf, 1)) < 0) { printf("semup failed on %d!!\n", sem_nbr); fflush(NULL); exit(EXIT_FAILURE); } printf("Up on sem %d\n",sem_nbr); fflush(NULL); return 0; }_ (à noter que down est la même chose avec -1 à la place de 1) Et là, quand j'utilise les up et down dans mes readers, après un certain temps variables (différent à chaque exécution), les sémaphores restent à 0 et ne remontent plus à 1, bloquant le programme. Parfois, il me dit qu'il n'a pas accès au sémaphore. Cela se produit généralement à la deuxième ou troisième instance du reader, parfois plus tôt, parfois plus tard. Bizarement, le fait de rajouter le fflush dans la fonction up a nettement réduit ces erreurs et certaines fois le programmes arrive jusqu'au bout de son exécution. Qqn a une tentative d'explication à ce phénomène ?

AltStyle によって変換されたページ (->オリジナル) /