3 Stimmen

Wie viele Synchronisationsobjekte können unter Windows pro Prozess und pro Rechner verwendet werden?

Es ist sehr wahrscheinlich, dass es eine Begrenzung dafür gibt, wie viele Synchronisationsobjekte - Semaphore, Ereignisse, kritische Abschnitte - ein Prozess und alle Prozesse auf einem bestimmten Rechner verwenden können. Worin genau besteht diese Begrenzung?

0 Stimmen

Raymond Chens Antwort darauf lautet: "Wenn man fragen muss, macht man wahrscheinlich etwas falsch" ( blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759.aspx ). Ich kann mir vorstellen, dass Sie nicht fragen, weil Sie daran denken, diese Grenze zu erreichen, aber nur für den Fall, dass ein Googler aus dem falschen Grund hierher kommt...

1 Stimmen

Ich soll eine Multiprozess-Anwendung entwickeln und muss die richtigen Synchronisationsprimitive auswählen. Wir sind bereits an die Grenzen gestoßen, da die Kapazität der Thread-Nachrichtenwarteschlange (die für PostThreadMessage() verwendet wird) erschöpft ist, und mussten einen Workaround entwickeln. Diesmal frage ich im Voraus.

0 Stimmen

4voto

aJ. Punkte 33220

Unter Windows beträgt die prozessbezogene Begrenzung der Kernel-Handles (Semaphoren, Ereignisse, Mutex) 2^24 .

から MSDN :

Kernel-Objekt-Handles sind Prozess spezifisch. Das heißt, ein Prozess muss entweder das Objekt erstellen oder ein vorhandenes Objekt öffnen, um ein Kernel Objekt-Handle zu erhalten. Die prozessspezifische Begrenzung für Kernel-Handles ist 2^24 . Allerdings, werden Handles im Paged-Pool gespeichert, so dass die tatsächliche Anzahl der Handles, die Sie Handles, die Sie erstellen können, hängt vom verfügbaren Speicher. Die Anzahl der Handles, die Sie unter 32-Bit-Windows erstellen können, beträgt deutlich niedriger als 2^24.

1 Stimmen

"Deutlich kleiner als 2^24" könnte 200 oder 20k sein. Ich liebe MSDN für solche Aussagen.

0 Stimmen

@sharptooth: Was haben Sie denn erwartet zu lesen? Es heißt, dass es vom verfügbaren Speicher abhängt, also könnte das alles von 0 bis ~2^24 sein...

2voto

Canopus Punkte 7031

Das hängt von der Quote ab, die für den Prozess zur Verfügung steht. Ich glaube, in XP ist es auf 10000 pro Prozess festgelegt, aber es kann sich erhöhen. Ich bin nicht sicher, was die Obergrenze ist.

Ich habe es gerade noch einmal überprüft, die 10000er Grenze gilt für die GDI-Handles und nicht für Kernel-Objekte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X