我是RMI的新手,但我(应该)知道如何使用锁,坦率地说,我不太了解整个RMI的事情,我只是不确定我缺少什么概念所以代码没有得到阻止。
自从我做并发以来已经有一段时间了,但afaik,就像这样:
if (condition) {
write.lock();
//do something since it's inside the critical section
write.unlock();
}
等等。而且我真的不需要它成为ReentrantReadWriteLocks或者其他什么,我只需要一个方法来获取锁定然后释放它。但是我需要在另一种方法中释放锁定,这就是我不知道我需要做什么(当它是rmi方法和客户端和服务器的代码以及我正在做的所有这些时)。
到目前为止我得到了什么:
public synchronized void acquire (boolean exc) throws RemoteException {
if (exc) {
write.lock();
else {
read.lock();
exclusivo = exc;
}
}
public synchronized boolean setFree() throws RemoteException {
if (read.tryLock()) {
read.unlock();
} else {
return false;
}
}
然后客户端调用一个方法来获取锁,进行操作,然后使用另一个方法来释放它。显然这还没有完成,我相信(虽然我不确定,这就是为什么我要问),读取锁是关于正确的...但我很难“相信”它,即使我'我试过了它似乎工作,我不确定我是否遗漏了别的东西。
这是一个问题,另一个是,我真的不知道如何处理写锁,因为如果我写write.tryLock,它是免费的,它将获得锁,然后我会。 ..释放它并返回true我猜?但是当条件返回时,锁可以再次使用,因为它是写锁定?这样的事情,不确定