线程模型--读写模型(2)

上述代码只是一段示意代码。实际应用中,人们通常抽取出来一个专门的读写同步锁。
interface ReadWriteLock {
  … getReadLock();
  … releaseReadLock();
  … getWriteLock();
  … releaseWriteLock();
}

具体的实现原理也是类似的信号量同步机制。
class RWLock {
  … readers, writers;

  … synchronized … getReadLock() { // 相当于synchronized(this)
     …
     while( writers > 0 )
         this.wait();  // 这里我们把RWLock对象本身作为信号量
       readers++;
  }

  …synchronized … releaseReadLock(){ //相当于synchronized(this)
       readers--;
   this.notifyAll(); // // 这里我们把RWLock对象本身作为信号量
  }

  …synchronized … getWriteLock(){// 相当于synchronized(this)
     while( writers > 0  || readers > 0 )
         this.wait();  // 这里我们把RWLock对象本身作为信号量

       writers++;
  }
  …synchronized …  releaseWriteLock(){// 相当于synchronized(this)
       writers--;
       this.notifyAll(); // // 这里我们把RWLock对象本身作为信号量
  }
}

具体用法是
public static final RWLock lock = new RWLock();

… read() {
  lock.getReadLock();
  // 读取
  lock.releaseReadLock();
}

… write() {
  lock.getWriteLock();
  // 读取
  lock.releaseWriteLock();
}

你可能感兴趣的:(线程)