有界缓冲区死锁

时间:2014-04-02 01:54:39

标签: java multithreading semaphore

我试图在Java中编写一个简单的有界缓冲区,但是在最初的几次操作之后,程序似乎陷入了僵局。

public BoundedBuffer(int size){
    buffer = new LinkedList<E>();
    this.empty = new Semaphore(size);
    this.full = new Semaphore(0);
    this.mutex = new Semaphore(1);
}

public void produce(E element) throws InterruptedException {
    this.empty.acquire();
    this.mutex.acquire();
    this.buffer.add(element);
    this.mutex.release();
    this.full.release();

}

public E consume() throws InterruptedException{
    this.full.acquire();
    this.mutex.acquire();
    E elem = this.buffer.remove(0);
    this.mutex.release();
    this.full.release();
    return elem;
}

这些是我的产品和消费方法,他们应该避免死锁。但是程序总是挂起。我错过了什么吗?

编辑:还添加了我的构造函数。

1 个答案:

答案 0 :(得分:1)

我认为您可能在this.empty.acquire()时遇到问题而从不致电this.empty.release()。最终empty将用完许可证。