对标题的措辞感到抱歉,没有解释清楚。如果有人可以编辑它会很好:)如何允许多个方法同时运行,而某些其他方法未运行?
我有四种方法,访问共享状态。目前他们不是线程安全的。 共享状态是一个列表。其中两个方法修改列表,两个方法迭代它。可以简单地同步所有方法,但这会导致性能下降 - 只要没有修改方法在运行,迭代方法就可以在多个线程中同时运行,这是非常安全的。
一种允许多个阅读器运行的锁定方法,或者需要一个写入器。
private List<T> list;
public void insert(T t) {// Write shared state
list.add(t);
}
public void remove(T t) {// Write shared state
list.remove(t);
}
public void doStuff(T t) {// Read shared state
// iterate list and do stuff
}
public void doOtherStuff() {// Read shared state
// iterate list and do stuff
}
线程都在使用这里,我很想改变设计,使这种不必要的,但我不能,因为我修补别人的代码以使其并发并需要尽可能保持与原始设计类似。 –
更多的细节可能会有所帮助。为什么某些方法可以同时运行,而某些方法不能?这是因为他们正在访问某个共享资源或共享状态吗? –
共享状态 - 一个阵列列表,a和b修改而c和d只能迭代。 –