这是读者作者的实现,即许多读者可以读取,但只有一个作者可以在任何时候写入。这是否按预期工作?读者作者并发问题Java
public class ReadersWriters extends Thread{
static int num_readers = 0;
static int writing = 0;
public void read_start() throws InterruptedException {
synchronized(this.getClass()) {
while(writing == 1) wait();
num_readers++;
}
}
public void read_end() {
synchronized(this.getClass()) {
if(--num_readers == 0) notifyAll();
}
}
public void write_start() throws InterruptedException{
synchronized(this.getClass()) {
while(num_readers > 0) wait();
writing = 1;
}
}
public void write_end() {
this.getClass().notifyAll();
}
}
而且是该实施方式中从每声明方法
public static synchronized read_start()
例如任何不同?
感谢
在我看来,你应该避免等待/通知一个公共对象,因为this.class或这是。这允许roque代码搞砸你的同步。同步对象应该是此类的专用字段。 – MeBigFatGuy 2011-05-22 18:39:34
这功课吗?如果没有@亚历克斯吉特曼的答案可能会被接受。 – 2011-05-22 19:07:53
>这是否按预期工作? (a)你期望什么? (b)它有什么作用? (c)有区别吗? – EJP 2011-05-23 02:21:44