ozeigermann 2005/01/07 15:33:24 Modified: transaction/src/java/org/apache/commons/transaction/locking ReadWriteLockManager.java GenericLock.java ReadWriteLock.java Log: Made write lock preferred over read lock like one would expect from a read/write lock Revision Changes Path 1.3 +8 -6 jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/ReadWriteLockManager.java Index: ReadWriteLockManager.java =================================================================== RCS file: /home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/ReadWriteLockManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ReadWriteLockManager.java 17 Dec 2004 00:21:15 -0000 1.2 +++ ReadWriteLockManager.java 7 Jan 2005 23:33:24 -0000 1.3 @@ -97,7 +97,8 @@ * will be thrown when the lock can not be acquired */ public void readLock(Object ownerId, Object resourceId) throws LockException { - lock(ownerId, resourceId, ReadWriteLock.READ_LOCK, true); + lock(ownerId, resourceId, ReadWriteLock.READ_LOCK, GenericLock.COMPATIBILITY_REENTRANT, + false, globalTimeoutMSecs); } /** @@ -116,7 +117,8 @@ * will be thrown when the lock can not be acquired */ public void writeLock(Object ownerId, Object resourceId) throws LockException { - lock(ownerId, resourceId, ReadWriteLock.WRITE_LOCK, true); + lock(ownerId, resourceId, ReadWriteLock.WRITE_LOCK, GenericLock.COMPATIBILITY_REENTRANT, + true, globalTimeoutMSecs); } protected GenericLock createLock(Object resourceId) { 1.9 +15 -4 jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/GenericLock.java Index: GenericLock.java =================================================================== RCS file: /home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/GenericLock.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- GenericLock.java 7 Jan 2005 13:52:42 -0000 1.8 +++ GenericLock.java 7 Jan 2005 23:33:24 -0000 1.9 @@ -194,6 +194,17 @@ } /** + * Tries to blockingly acquire a lock which can be preferred. + * + * @see #acquire(Object, int, boolean, int, boolean, long) + */ + public synchronized boolean acquire(Object ownerId, int targetLockLevel, boolean preferred, + long timeoutMSecs) throws InterruptedException { + return acquire(ownerId, targetLockLevel, true, COMPATIBILITY_REENTRANT, preferred, + timeoutMSecs); + } + + /** * Tries to acquire a certain lock level on this lock. Does the same as * [EMAIL PROTECTED] org.apache.commons.transaction.locking.MultiLevelLock#acquire(java.lang.Object, int, boolean, boolean, long)} * except that it allows for different compatibility settings. There is an 1.3 +9 -7 jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/ReadWriteLock.java Index: ReadWriteLock.java =================================================================== RCS file: /home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/ReadWriteLock.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ReadWriteLock.java 13 Dec 2004 10:51:40 -0000 1.2 +++ ReadWriteLock.java 7 Jan 2005 23:33:24 -0000 1.3 @@ -32,7 +32,9 @@ * Reads are shared which means there can be any number of concurrent read * accesses allowed by this lock. Writes are exclusive. This means when there is * a write access no other access neither read nor write are allowed by this - * lock. <br> + * lock. Additionally, writes are preferred over reads in order to avoid starvation. The idea + * is that there are many readers, but few writers and if things work out bad the writer would + * never be served at all. That's why it is preferred.<br> * <br> * Calls to both [EMAIL PROTECTED] #acquireRead(Object, long)}and * [EMAIL PROTECTED] #acquireWrite(Object, long)}are blocking and reentrant. Blocking @@ -80,7 +82,7 @@ * when the thread waiting on this method is interrupted */ public boolean acquireRead(Object ownerId, long timeoutMSecs) throws InterruptedException { - return acquire(ownerId, READ_LOCK, true, true, timeoutMSecs); + return acquire(ownerId, READ_LOCK, false, timeoutMSecs); } /** @@ -98,6 +100,6 @@ * when the thread waiting on this method is interrupted */ public boolean acquireWrite(Object ownerId, long timeoutMSecs) throws InterruptedException { - return acquire(ownerId, WRITE_LOCK, true, true, timeoutMSecs); + return acquire(ownerId, WRITE_LOCK, true, timeoutMSecs); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]