Question

J'ai une application simple avec un fil "Manager" qui engendre dix threads "travailleurs" simples. Je veux que tous les threads "travailleurs" bloquent sur la même variable de condition (c'est-à-dire: condvar), et je veux signaler manuellement les dix threads pour se réveiller en même temps avec un appel pthread_cond_broadcast.

Dans le cas de mon application, il est possible pour les threads de subir une condition d'erreur et de se terminer tôt, il est donc possible que les dix threads ne parviennent pas au point de synchronisation.

Un mécanisme simple serait de créer un pthread_barrier_t et de faire appeler les dix threads pthread_barrier_wait, et lorsque les dix threads terminent cet appel, ils sont tous libres de continuer à exécuter. Cependant, cela nécessiterait que les threads soient capables de modifier le nombre de threads que la barrière nécessite de débloquer. Je ne sais pas si cela peut être modifié en toute sécurité.

De plus, je veux garantir que tous les threads qui travaillent toujours ne commencent pas automatiquement comme ils le feraient avec une barrière, je veux les démarrer manuellement avec un appel pthread_cond_broadcast à la place. Comment pourrais-je garantir que tous les fils qui sont encore en vie (idéalement dix) ont bloqué sur le condvar avant de passer l'appel de diffusion?

Merci!

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top