我想知道是否有一个简单的解决读者作者问题的方法,在这个问题上,我们可以赋予读者优先权,而不是使用信号量的绝对优先级。基本上,我希望在关键部分的队列中实现5名读者对1名作家的比例。
换句话说,如果一个读者和一个作家想要进入关键部分,读者将有优先权。如果另一位读者想在这之后进入,他们也有优先权。这将继续对五个读者,然后作者将优先考虑。
例如,想象一下,如果10名读者和2名作家想要进入关键部分。进入顺序为:
我希望能在这件事上提供任何帮助。
发布于 2014-05-14 03:06:38
两天前,我刚刚参加了一个设计会议,我们打算解决同样的问题。这是我们想出来的。
class WeightedSemaphore {
Map<String,Semaphore> layer1
Semaphore layer2
//ratios passed, for your example: read:5, write:1
public configure(int realLeases, Map<String,Integer> ratios) {
for (String key : ratio.keys) {
layer1.put(key, new Semaphore(realLeases * ratios.get(key))
}
layer2 = new Semaphore(realLeases, fair)
}
public acquire(String key) {
layer1.get(key).acquire();
layer2.acquire();
}
}这是极小的伪码,但主要通过。其主要想法是设计一个2层信号量,其中layer2是一个单一的信号量,具有我们想要支持的实际数量的租约;而layer1帮助塑造了等待layer2信号量的工作组合。
这种方法有两个特性,我认为它们很酷。
希望这能有所帮助。
https://stackoverflow.com/questions/23402347
复制相似问题