5
スレッドの安全性を維持しながら、複数の同時データ構造にどのようにアクセスできますか?同期なしでこれを行うことは可能ですか?簡単な例として複数の同時データ構造へのスレッドセーフなアクセス
:
ConcurrentHashmap m;
CopyOnWriteArrayList l;
public bool enterListNode(int elem) {
Node node = l.get(elem);
String key = node.key(); //key is immutable
int val = node.val(); //val is immutable
val = m.putIfAbsent(key, val);
return val;
}
それは(node==l.get(elem))
はもはや真実ではないことを、我々はputIfAbsent(key, val)
を行う際いる可能性がありますので、この例では、線形化されていません。
ロックを追加する以外の方法はありますか?
これは、外部の情報源(例)を求めているため、話題に近づくほど危険に遭いそうな良い質問です。私はその問題を避けるために言い換えました。変更が多すぎると感じた場合は、元に戻すか編集することができます。あなたは[ヘルプ]を見直し、[質問]にポインタを読むこともできます。この具体的な例の –
は、あなたが言いたいことは、あなたが提供する必要がある保証に応じて、完全には機能しません(つまり、mが少し遅れていればいいかもしれません)。一般的なケースでは、本当にこの質問に答えることはできません。 – jtahlborn