さまざまなスレッドからのコレクション (この場合はキュー) を使用するアプリケーションがあります。オブジェクトはあるスレッドでキューに入れられ、別のスレッドでは別のオブジェクトがキューから取り出されます。
これらのアクションは同時に発生する可能性があり、コレクション カウンターが再定義されているときに、引数の範囲外例外などの例外で解決されます。
私は「見栄えの良い」ものと、これらのアクションを互いに除外する正しい理由を探しています。
「見栄えが良い」とは、ロック(オブジェクト)メカニズムを含むこのコレクションから派生した独自のコレクションを作成したくないということです
私が持っていたブレーンストーミングのアイデアは使いたくありません。これはかなり「醜い」ものです。
enqueueOk = false;
while (!enqueueOk)
{
try
{
Qsockets.Enqueue(currentSoc);
enqueueOk = true;
}
catch { }
}
もちろん、ロックまたはミューテックスを使用することを考えましたが、それは、これらのアクションを各スレッドから呼び出されるプロシージャにラップし、エンキューまたはデキューすることを決定した場合にのみ当てはまり、これも長くて「醜い」ものになります。
編集:
誰も私の答えを下に見ていないようだから
コレクション自体にロック機構を使用しました
lock(Qsockets)
{
Qsockets.Enqueue(currentSoc);
}