-1

有没有办法使用同步方法来创建重入锁机制?

由于同步方法不会让 2 个线程一起进入临界区,我认为这是不可能的。谁能给我一些见解?

假设我将可重入属性扩展到 Reader-Writer 问题,其中多个读者可以锁定同一个对象,但 Writer 锁是独占的。

我们可以使用同步方法来实现这个功能吗?

4

3 回答 3

2

不知道我是否理解这个问题,但是重入锁是一个你可以在你已经持有它时第二次获得的锁(与非重入锁相反,它只会在此时阻塞)。

Java 中的同步块有这个属性:已经持有锁的线程可以进入块。

没有这个,编写正确的执行路径将非常困难,因为你不能让一个对象的一个​​同步方法调用另一个。

于 2013-10-08T00:45:35.833 回答
2

在下面的代码中

public class Foo {
    public synchronized void bar() { 
        zoop();
    }

    public synchronized void zoop() {}
}

如果一个Thread电话

Foo foo = new Foo();
foo.bar();

你有一个可重入锁,因为它Thread拥有Foo对象监视器,然后在它调用zoop()inside时重新获取它bar()

于 2013-10-08T00:45:36.090 回答
1

目前尚不清楚您是否了解“重入”的实际含义。这意味着您可以重新获得已经持有的锁而不会被阻止。synchronized已经具有重入属性。

于 2013-10-08T01:09:11.503 回答