問題タブ [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.
windows - 複数カウントでセマフォをロックする方法
セマフォはカウンティング オブジェクトです。問題は、複数のカウントでロックする方法ですか?
たとえば、関数を呼び出したいとしlock(num, timeout)
ます。利用可能なリソースが少なくともある場合はロックするnum
か、パスした場合は失敗しますtimeout
が、リソースがまだ 未満です num
。
Windowsで可能ですか?それともpthreadを使用していますか?
現在 Windows では、WaitForSingleObject
オブジェクトの数を だけ減らします1
。WaitForSingleObject
次の理由により、複数回呼び出しても問題は解決しないと思います。
正確なタイムアウトを達成するのは難しく、
num
リソースがすべて利用可能なときにデータを処理 (ディスクへの書き込み) したい(大きなサイズのデータを書き込む方が高速です)。したがって、たとえば、num
個別にロックされているリソースが少ない場合、タイムアウトが経過しても残りはまだ使用できないため、次回のためにそれらを解放する必要がある場合があります (ロックした直後)。設計が悪いと思います。助けが必要です。
multithreading - アプリケーション グローバルから呼び出されると、スレッドの WaitForSingleObject がフリーズする
アプリケーション(実際にはDLL)が終了したときに破棄する必要があるプールの一部としてスレッドを作成します。したがって、いくつかの「グローバル」があります。これは、グローバルに静的にインスタンス化された構造を意味し、デストラクタで、作成されたスレッドを解放し、WaitForSingleObject を使用してそれらを待ちます。残念ながら、これは永久にフリーズし、デバッガーでチェックインすると、スレッドがまだ存在し、システム DLL のどこかにスタックしているだけであることがわかります。グローバルがリリースされる前にこれを呼び出すと、すべてうまくいきます。Win32 ドキュメントでこれについて言及されていません。何か案は?