条件与java并发中的信号量

时间:2014-04-18 01:07:26

标签: java conditional-statements semaphore

我无法理解作业问题。这个问题要求我们通过仅使用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();
    }
}

1 个答案:

答案 0 :(得分:0)

如果这是您的作业,请查看Lock&amp;的源代码。条件和条件首先是j2se的信号量。 然后尝试实施它,这样你的作业就有意义了,它会让你理解这个机制。