2009-08-30 7 views
4

J'ai une ressource de file d'attente qui est partagée entre plusieurs producteurs et plusieurs consommateurs. Tous sont des processus indépendants; aucun processus ne "possède" la file d'attente.Synchronisation multi-processus - meilleur choix que les sémaphores?

De par la nature de la mise en œuvre, l'accès à la file d'attente doit être contrôlé et un seul processus doit être autorisé à pousser ou à sauter à un moment donné. Je pensais que l'utilisation d'un sémaphore nommé POSIX serait la bonne solution, mais quelques détails me dérangent. (Ceci est une implémentation Linux seulement, btw.)

  1. Quand (si jamais) dois-je faire un sem_unlink? Y a-t-il une raison de supprimer la file d'attente?

  2. Je suis préoccupé par un processus qui meurt tout en maintenant le sémaphore de file d'attente verrouillé. Y a-t-il un bon moyen de contourner cela? Je peux faire une attente chronométrée lorsque j'essaie d'obtenir le verrou, mais si le délai expire, j'ai maintenant une condition de course.

  3. Existe-t-il une meilleure solution pour un simple verrouillage binaire comme celui-ci? Peut-être un fichier de verrouillage utilisant fcntl et/ou exclusif s'ouvre-t-il?

Répondre

3

Les verrous de fichiers ont l'avantage de se déverrouiller en cas de mort inattendue. Je pense qu'ils conviennent le mieux à votre scénario. Je peux imaginer utiliser des sémaphores quand j'ai besoin de la sémantique plus complexe qu'ils supportent (ils supportent plus que l'utilisation de mutex que vous avez en tête) mais si je les utilise, j'ai besoin d'un moyen de faire le ménage en cas d'intempéries décès. J'observe que Lotus Notes sur Windows a un "ZapNotes" Houskeeper qui range dans ce que je suppose sont des scénarios similaires "ne devrait pas arriver".

+0

Ce sont des applications basées sur les services, donc un "KillNotes" (que j'ai utilisé à plusieurs reprises!) Ne fonctionnerait pas ici, mais merci pour la suggestion. – Joe

+0

La suggestion était en fait d'utiliser des verrous de fichiers. La nécessité de l'entretien ménager tels killnotes KillNotes me fait peur d'utiliser sempahores. – djna

+0

Désolé, j'ai compris votre intention, n'était pas clair sur ma réponse. – Joe

Questions connexes