| NonBlockingWriterLock.java |
/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.cache.lock;
//import EDU.oswego.cs.dl.util.concurrent.Sync;
//import EDU.oswego.cs.dl.util.concurrent.Semaphore;
//import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
import org.jboss.logging.Logger;
/**
* NonBlockingWriterLock is a read/write lock (with upgrade) that has
* non-blocking write lock acquisition on existing read lock(s).
* <p>Note that the write lock is exclusive among write locks, e.g.,
* only one write lock can be granted at one time, but the write lock
* is independent of the read locks. For example,
* a read lock to be acquired will be blocked if there is existing write lock, but
* will not be blocked if there are mutiple read locks already granted to other
* owners. On the other hand, a write lock can be acquired as long as there
* is no existing write lock, regardless how many read locks have been
* granted.
*
* @author Ben Wang
* @version $Id: NonBlockingWriterLock.java,v 1.3 2004/03/19 06:31:16 bwang00 Exp $
*/
public class NonBlockingWriterLock extends ReadWriteLockWithUpgrade
{
protected static Logger log_ = Logger.getLogger(NonBlockingWriterLock.class);
// Only need to overwrite this method so WL is not blocked on RL.
protected synchronized boolean startWrite()
{
boolean allowWrite = (activeWriter_ == null);
if (allowWrite) activeWriter_ = Thread.currentThread();
return allowWrite;
}
}
| NonBlockingWriterLock.java |