2009-05-06 11 views
3

セマフォ、イベント、クリティカルセクションのどれくらいの同期オブジェクトが1つのマシン上で処理でき、すべてのプロセスが使用できるかには限界があります。この制限は正確に何ですか?Windowsでは、プロセスごとおよびマシンごとにいくつの同期オブジェクトを使用できますか?

+0

これに対する答えは、「質問する必要がある場合は、おそらく間違っている」(http://blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759)。 aspx)。その上限に達することを考えているので質問していないと思うかもしれませんが、間違った理由でGoogle GoLerがここに来る場合は... – eran

+1

私はマルチプロセスアプリケーションを開発し、適切な同期プリミティブを選択する必要があります。私たちはすでにスレッドメッセージキュー(PostThreadMessage()に使用されていた)の容量を使い果たして限界に達し、回避策を講じなければなりませんでした。今回私は事前に尋ねます。 – sharptooth

+0

http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx – Mehrdad

答えて

4

ウィンドウの場合、カーネルハンドル(セマフォ、イベント、mutex)のプロセスごとの制限は2^24です。 MSDNから

カーネルオブジェクトのハンドルは、プロセス 固有のものです。つまり、プロセスは オブジェクトを作成するか、 既存オブジェクトを開いてカーネル オブジェクトハンドルを取得する必要があります。カーネルハンドル上のプロセス単位の制限 は、2^24です。ただし、 ハンドルはページプールに格納されます したがって が作成できる実際のハンドル数は利用可能な メモリに基づいています。 が32ビットWindowsで作成できるハンドル数は、 で、2^24より大幅に低くなります。

+1

「2^24より有意に低い」は200になる可能性があり、20kになる可能性があります。私はそのようなステートメントのためにMSDNが大好きです。 – sharptooth

+0

@sharptooth:あなたは何を読もうと思いましたか?それは利用可能なメモリに依存しているので、0から〜2^24までの何でもかまいません... – Mehrdad

2

これは、プロセスで使用可能なクォータによって異なります。 XPでは10000プロセスに設定されていると思いますが、それは大きくなる可能性があります。私は上限が何であるか分かりません。

もう一度チェックしてください。10000制限はGDIハンドル用であり、カーネルオブジェクト用ではありません。

関連する問題