我无法理解作业问题。这个问题要求我们通过仅使用Semaphore作为并发控制类来模仿Condition的实现,而不是其他任何东西。有人可以通过解释确切的问题来指出我的方向
在示例MySemaphore.java中,我们使用Lock实现了一个信号量 和条件。现在,仍然保持同样的精神,实施一个 类Mycondition类似于Condition with methods await和 信号(这里不需要实现其余的方法)。在你的 实现,是你唯一的并发控制类 允许使用的是Semaphore。
以下是问题中提到的示例
import java.util.concurrent.locks.*;
// A standard exercise of Concurrency 101 is to show that Semaphores are
// equivalent to Locks and Condition Variables in power, by implementing
// one with the other. Here, a simple Semaphore implementation.
public class MySemaphore {
private int permits;
private Lock mutex;
private Condition permitAvailable;
public MySemaphore(int permits, boolean fair) {
this.permits = permits;
this.mutex = new ReentrantLock(fair);
this.permitAvailable = mutex.newCondition();
}
public void acquire() throws InterruptedException {
mutex.lock();
try {
while(permits < 1) {
// Wait for one permit to become available.
permitAvailable.await();
}
permits--;
}
// Ensure that mutex is unlocked even if an exception is thrown.
finally { mutex.unlock(); }
}
public void release() {
mutex.lock();
permits++;
// One waiting thread can now acquire a permit.
permitAvailable.signal();
mutex.unlock();
}
}
答案 0 :(得分:0)
如果这是您的作业,请查看Lock&amp;的源代码。条件和条件首先是j2se的信号量。 然后尝试实施它,这样你的作业就有意义了,它会让你理解这个机制。