程序如何尝试同时锁定多个互斥锁,并知道它解锁了哪个互斥锁。本质上,我正在寻找的是select()
在互斥锁方面的等价物。这样的东西存在吗?如果没有,是否有任何实现它的库?
程序如何尝试同时锁定多个互斥锁,并知道它解锁了哪个互斥锁。本质上,我正在寻找的是select()
在互斥锁方面的等价物。这样的东西存在吗?如果没有,是否有任何实现它的库?
select()
: // grab a mutex if possilbe
Mutex select(Semaphore s, Mutex[] m) {
P(s); // wait for the semaphore
for (Mutex toTry : m) {
boolean result = try_unlock(m);
if (result) return m;
}
}
本质上,信号量跟踪可用锁的数量,因此每当P(s)停止阻塞时,必须至少有一个可用的互斥锁(假设在互斥锁可用时正确地增加了信号量!)
我尚未尝试证明此代码是否正确,也没有测试过它...但我不认为它不起作用。
再次强调,您可能希望使用监视器!