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;
}
這個例子不是線性化,因爲它可能是當我們做putIfAbsent(key, val)
,即(node==l.get(elem))
不再是真實的。
除了添加鎖之外,還有什麼辦法可以解決這個問題嗎?
這是一個很好的問題,因爲要求外部資源(即例子),因此離題越來越近。我已經重寫了它以避免這個問題。如果您覺得它太多變化,您可以恢復或編輯。您可能想查看[幫助],並閱讀[問]指針。 –
對於這個特定的例子,正如你所說的那樣,它並不完全起作用,這取決於你需要提供的保證(例如,如果m稍微落後於l,它可能沒問題)。在一般情況下,你不能真正回答這個問題。 – jtahlborn