多くの異なるスレッドが割り当てを要求できる共有メモリ プールがあります。これから割り当てを要求すると、すべてのスレッドで大量に発生しますが、スレッドの量は少なく、多くの場合、実行中のスレッドは 1 つだけです。これを処理する次の方法のどれが優れているかわかりません。
最終的には両方を実装して、どちらがより好ましい結果をもたらすかを確認する必要があるかもしれません...また、この共有リソースを使用するコードを実際にはまだ作成していないため、この時点で #2 を考えても時期尚早の最適化になるのではないかと心配しています。しかし、この問題は非常に興味深いので、他の作業から気をそらし続けています。
1) ミューテックスを作成し、割り当てを取得する前にスレッドにロックを試行させ、ロックを解除します。
2) 各スレッドに要求スロットを登録させます。割り当てが必要な場合は、要求をスロットに入れ、(while (result == NULL) { usleep() }) 要求スロットが結果を待つのをブロックします。1 つのスレッドがリクエスト スロットを継続的に反復し、割り当てを行い、リクエスト スロット内の結果に割り当てます。
番号 1 は単純な解決策ですが、タイミングが適切であれば、1 つのスレッドがロックを独占する可能性があります。2 つ目はより複雑ですが、リソースからプルするときにスレッド間の公平性を保証します。ただし、要求元のスレッドは引き続きブロックされ、多数のスレッドが存在する場合、実行する要求が見つかるまで、実際の割り当てを行わずに反復がサイクルを焼き尽くす可能性があります。
注: pthread を使用する Linux 上の C