Bonjour a tous,
Donc voila tout est dans le titre.
Je vais quand même détailler un peu.
Je dois faire du monitoring de processus enfants depuis un processus père. Pour cela mon processus père possède un handler sur le signal SIGCHLD qui signal la fin d'un processus fils. Sur réception du signal il récupère les données de siginfo_t passé en passé par le signal et les mets dans un FIFO.
Cette FIFO est bloquée et protégée (sémaphore + mutex).
Pour l'instant je n'ai pas de problème mais je sais que je peux tomber dans un cas de deadlock qui est le suivant.
une data est poussée dans la fifo, le sémaphore est augmenté à 1.
la fifo alors en attente sur le sémaphore le réduit a 0, verrouille le mutex récupère la data stockée.
Par malchance un SGCHLD est levé alors que la FIFO n'a pas relâché le mutex
Le handler du signal cherche à prendre le mutex de la FIFO déjà verrouiller par le thread
Le signal reste bloqué car le mutex ne peut être pris et le thread reste bloqué car le signal n'a pas rendu la main.
-> DEADLOCK
Ma question des donc la suivante comment puis-je empêcher ce cas?
P.S. La fifo est un template sur lequel je n'ai pas la main. Je veux dire par la que je ne peux pas m'amuser a bloquer le signal (avant le mutex) puis le débloquer une fois le mutex libéré.
Merci par avance
Partager