問題タブ [waitforsingleobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
106 参照

windows - 複数カウントでセマフォをロックする方法

セマフォはカウンティング オブジェクトです。問題は、複数のカウントでロックする方法ですか?

たとえば、関数を呼び出したいとしlock(num, timeout)ます。利用可能なリソースが少なくともある場合はロックするnumか、パスした場合は失敗しますtimeoutが、リソースがまだ 未満です num

Windowsで可能ですか?それともpthreadを使用していますか?

現在 Windows では、WaitForSingleObjectオブジェクトの数を だけ減らします1WaitForSingleObject次の理由により、複数回呼び出しても問題は解決しないと思います。

  1. 正確なタイムアウトを達成するのは難しく、

  2. numリソースがすべて利用可能なときにデータを処理 (ディスクへの書き込み) したい(大きなサイズのデータ​​を書き込む方が高速です)。したがって、たとえば、 num 個別にロックされているリソースが少ない場合、タイムアウトが経過しても残りはまだ使用できないため、次回のためにそれらを解放する必要がある場合があります (ロックした直後)。設計が悪いと思います。助けが必要です。

0 投票する
1 に答える
97 参照

multithreading - アプリケーション グローバルから呼び出されると、スレッドの WaitForSingleObject がフリーズする

アプリケーション(実際にはDLL)が終了したときに破棄する必要があるプールの一部としてスレッドを作成します。したがって、いくつかの「グローバル」があります。これは、グローバルに静的にインスタンス化された構造を意味し、デストラクタで、作成されたスレッドを解放し、WaitForSingleObject を使用してそれらを待ちます。残念ながら、これは永久にフリーズし、デバッガーでチェックインすると、スレッドがまだ存在し、システム DLL のどこかにスタックしているだけであることがわかります。グローバルがリリースされる前にこれを呼び出すと、すべてうまくいきます。Win32 ドキュメントでこれについて言及されていません。何か案は?