2010-05-02 3 views
1

J'écris une application C# qui peut créer une série de messages de requête. Chaque message pourrait avoir une réponse, qui doit être attendue par un consommateur.Y at-il une limite sur le nombre d'objets mutex qui peuvent être créés dans un processus Windows?

Lorsque le nombre de messages de demande en attente est limité, j'ai utilisé l'événement Windows pour résoudre ce problème. Cependant, je sais qu'il y a une limite au nombre d'objets EVENT pouvant être créés dans un seul processus, et dans ce cas, il est possible que je dépasse cette limite.

Est-ce que quelqu'un sait s'il existe une limite similaire pour la création d'objets mutex ou de sémaphores? Je sais que cela peut être résolu par une sorte de pool de ressources partagées, qui sont saisies par les consommateurs quand ils doivent attendre, mais il serait plus pratique que chaque message de requête ait son propre objet de synchronisation.

+1

Les sections critiques sont plus légères si vous en avez besoin de beaucoup. Rappelez-vous, je me méfie des conceptions qui nécessitent beaucoup d'objets de style mutex. –

+1

J'ai vu divers articles sur les limites strictes des ressources système. Raymond Chen est un bon endroit pour commencer à regarder. Cependant, je suis d'accord avec Marcelo Cantos. Le système peut allouer "beaucoup" d'objets mutex. Si vous avez besoin de savoir exactement combien "beaucoup" est, vous le faites mal. Mettre en pool les ressources ou utiliser une file d'attente d'événements à la place. –

Répondre

1

Le système limite le nombre total de poignées qu'un processus peut créer. Les événements, les mutex, les sémaphores, etc. contribuent tous au nombre de handles de sorte qu'ils seront tous limités par le système.

Cette limite était de 16 * 1024 * 1024, mais j'ai été loin de ce genre de choses pendant un moment, je ne sais pas si elle a changé avec les nouveaux systèmes d'exploitation et 64 bits, mais pour être honnête, j'en doute. énorme nombre de poignées à créer, et constitue probablement un défaut de conception grave si vous vous en approchez. N'ayant pas une image très claire de ce que vous voulez, je peux me tromper, mais peut-être que vous pourriez regarder quelque chose comme le modèle d'événement asyc? http://msdn.microsoft.com/en-us/library/wewwczdw.aspx

Questions connexes