⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reader_writer.txt

📁 操作系统课内实验部分
💻 TXT
字号:
/**
*  Sync interface
*  Sync.java
*/

public interface Sync {
    public void acquire();
    public void release();
}


/**
*  WriterPreferenceReadWriteLock class
*  WriterPreferenceReadWriteLock.java
*/

public class WriterPreferenceReadWriteLock implements ReadWriteLock {

    private long waitingReaders = 0; // threads try to read
    private long waitingWriters = 0; // threads try to write

   private long activeReaders = 0; // threads excuting read
    private long activeWriters = 0; // threads excuting write, 0 or 1

    private final ReadLock readLock = new ReadLock();
    private final WriteLock writeLock = new WriteLock();

    public Sync readLock() {
        return readLock;
    }

    public Sync writeLock() {
        return writeLock;
    }

    private class ReadLock implements Sync {
        public void acquire() {
            beforeRead();
        }

        public void release() {
            afterRead();
        }
    }

    private class WriteLock implements Sync {
        public void acquire() {
            beforeWrite();
        }

       public void release() {
            afterWrite();
        }
    }

   private synchronized void beforeRead() {
        ++waitingReaders;
        while (!canRead()) {
            try {
                wait();
            } catch (InterruptedException e) {
                --waitingReaders; // roll back state
                e.printStackTrace();
            }
        }
        --waitingReaders;         ++activeReaders;
    }

    private synchronized void afterRead() {
        --activeReaders;
        notifyAll();
    }

    private synchronized void beforeWrite() {
        ++waitingWriters;
        while (!canWrite()) {
            try {
                wait();
            } catch (InterruptedException e) {
                --waitingWriters; // roll back state
                e.printStackTrace();
            }
        }
        --waitingWriters;
        ++activeWriters;
    }

    private synchronized void afterWrite() {
        --activeWriters;
        notifyAll();
    }

    private boolean canRead() {
        return waitingWriters == 0 && activeWriters == 0;
    }

    private boolean canWrite() {
        return activeReaders == 0 && activeWriters == 0;
    }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -