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