J'implémente une file d'attente de messages C++ basée sur une file d'attente std ::. Comme j'avais besoin que les popers attendent dans une file d'attente vide, j'envisageais d'utiliser mutex pour l'exclusion mutuelle et de suspendre les threads dans la file d'attente vide, comme le fait glib avec gasyncqueue.Quoi de mieux pour une file d'attente de messages? mutex & cond ou mutex et sémaphore?
Cependant, il me semble qu'un sémaphore mutex & ferait l'affaire, je pense qu'il contient un nombre entier et cela semble être un nombre assez élevé pour atteindre les messages en attente. Les avantages du sémaphore sont que vous n'avez pas besoin de vérifier manuellement la condition chaque fois que vous revenez d'une attente, car vous êtes maintenant sûr que quelqu'un a inséré quelque chose (quand quelqu'un a inséré 2 éléments et vous êtes le deuxième thread arrivant) .
Lequel choisiriez-vous?
EDIT: Changé la question en réponse à Rogers @ Greg
Hmm, vous avez raison, je ne l'ai pas demandé correctement, j'utilise un mutex pour l'accès aux données, à part le sémaphore. –
Regardez la source de http://code.google.com/p/litm/ dans le fichier queue.c. – jldupont