マルチスレッドアプリケーションで読み書きされるアイテムのコレクションがあるとします。いくつかのアイテムにアルゴリズムを適用する場合は、ロックを取得するためのさまざまな方法があります。このように、後で処理するアイテムのスレッドセーフなコレクションを取得するためにコレクションをロックする最も良い方法は何ですか?
for each thing in things
{
lock(collection)
{
get the item from collection that matches thing
}
do stuff with item
}
またはオンデマンドでロックすることで、コレクションを持つ:需要をロックオンすることにより
lock(collection)
{
for each thing in things
{
get the item from collection that matches thing
do stuff with item
}
}
:全体の操作中にロックすることにより
少ない時間でロックされます:
Items items
for each thing in things
{
lock(collection)
{
get the item from collection that matches thing
}
items.Add(item)
}
for each item in items
{
do stuff with item
}
各項目に適用された実際のアルゴリズムにつきますが、あなたは何をしますか?私はC + +を使用していますが、私はかなり無関係であると確信しています。
この方法にかかわらず、私の場合はどうしますか? –
更新された答えを見てください。アイデアは、コレクションと一緒に別のフィールド/変数を導入し、この特定のフィールドをロックすることです。コレクションまたは各要素をロックするインスタント(前者は混乱しています) – sll
"double check locking is broken"宣言。 –