Bonjour !
Je suis en train de coder un programme nécessitant un mécanisme de communication inter process. En fait, mon application pourrait être lancée un nombre illimité de fois, chaque exécution se passant dans un contexte différent.
Mon problème, c'est la création du sémaphore gerant l'accès exclusif à certaines ressources partagées.
si j'ai bien compris, il suffit de faire un
Code :
- semid = semget(UNIQUE_KEY, 1, 0666 |IPC_CREAT);
- semctl_arg.val = 1;
- semctl(semid, 0, SETVAL, semctl_arg);
|
Pour créer et initialiser un sémaphore à 1.
Cependant, je ne sais pas quel process crée le sémaphore en premier.
Apparemment, semget (.... 0666 | IPC_CREAT) ouvre le sémaphore s'il existe déja et le crée sinon. Donc ca pourrait aller, je pourrais utiliser le même code dans tous mes process.
Par contre, l'initialisation du sémaphore à 1 ne doit se faire qu'une seule fois (problème si un process est en train de re-initialiser le semaphore à 1 alors qu'un autre le possède...).
La solution la plus simple serait de créer ce sémaphore avant tout lancement de mon application mais c'est plutôt lourd dans mon cas...
Quid aussi d'une application killée alors quelle avait le sémaphore?
Merci de vos conseils