セマフォはカウンティング オブジェクトです。問題は、複数のカウントでロックする方法ですか?
たとえば、関数を呼び出したいとしlock(num, timeout)
ます。利用可能なリソースが少なくともある場合はロックするnum
か、パスした場合は失敗しますtimeout
が、リソースがまだ 未満です num
。
Windowsで可能ですか?それともpthreadを使用していますか?
現在 Windows では、WaitForSingleObject
オブジェクトの数を だけ減らします1
。WaitForSingleObject
次の理由により、複数回呼び出しても問題は解決しないと思います。
正確なタイムアウトを達成するのは難しく、
num
リソースがすべて利用可能なときにデータを処理 (ディスクへの書き込み) したい(大きなサイズのデータを書き込む方が高速です)。したがって、たとえば、num
個別にロックされているリソースが少ない場合、タイムアウトが経過しても残りはまだ使用できないため、次回のためにそれらを解放する必要がある場合があります (ロックした直後)。設計が悪いと思います。助けが必要です。