Pour un code concurrent, je veux connecter un groupe de signaux ensemble comme un circuit. En .NET, nous pouvons faire un WaitAll ou WaitAny sur une collection de signaux. Je veux faire quelque chose comme ceci:Comment connecter des signaux dans des circuits complexes dans .NET?
WaitAny (WaitAll (c1, c2), WaitAll (c3, c4)) ;
Malheureusement, la bibliothèque ne supporte pas la composition de ces opérations dans des arbres plus complexes. Mes questions sont (1) Y at-il un moyen de faire cela dans .NET? (2) Y a-t-il une bibliothèque pratique dans toutes les langues?
[edit: Cory a demandé plus de détails]
Je veux construire une bibliothèque de passage de messages. Il pourrait y avoir 10K petites files d'attente concurrentes, certaines avec des messages. Je veux récupérer un message d'une file d'attente et exécuter un gestionnaire affecté à la file d'attente. Cependant, je ne peux pas récupérer le message suivant jusqu'à ce que le gestionnaire soit terminé (thread unique par file d'attente). Donc, vraiment, je veux attendre à la fois sur la file d'attente (j'ai un message?) Et le code (terminé avec le message précédent?) Avant de sauter et d'exécuter l'élément suivant.
Je ne peux pas croire que je suis upvoting ce soit. :) – Tanzelax
Malheureusement, cela permettrait d'allouer un fil pour chaque sous-arbre dans le circuit. Je veux presque 10K d'entre eux, donc cela ne sera pas à l'échelle. La conception de l'API est difficile car, par exemple, comment la valeur de retour vous dirait quel sous-arbre est réellement déclenché dans WaitAny? Pensez à des arbres de signaux vraiment fous. – projectshave
@projectshave: Ya un thread par groupe ne serait pas à l'échelle mais vous pourriez créer un seul thread repsonsible pour le 'WaitAll' avec des délais d'expiration bas. Toujours pas évolutif. Le WaitAny retourne l'indice de l'objet dans le tableau que vous avez passé afin que vous sachiez quel signal a été déclenché. Peut-être que vous pourriez mettre à jour votre question avec le problème de base que vous essayez de résoudre et quelqu'un pourrait avoir une meilleure solution que la méthode WaitAny (WaitAll(), WaitAll()) que vous décrivez. –