diff src/EDU/oswego/cs/dl/util/concurrent/ReadWriteLock.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/EDU/oswego/cs/dl/util/concurrent/ReadWriteLock.java	Sat Mar 21 11:00:06 2009 +0000
@@ -0,0 +1,82 @@
+/*
+  File: ReadWriteLock.java
+
+  Originally written by Doug Lea and released into the public domain.
+  This may be used for any purposes whatsoever without acknowledgment.
+  Thanks for the assistance and support of Sun Microsystems Labs,
+  and everyone contributing, testing, and using this code.
+
+  History:
+  Date       Who                What
+  11Jun1998  dl               Create public version
+*/
+
+
+package EDU.oswego.cs.dl.util.concurrent;
+
+
+/**
+ *  ReadWriteLocks maintain a pair of associated locks.
+ * The readLock may be held simultanously by multiple
+ * reader threads, so long as there are no writers. The writeLock
+ * is exclusive. ReadWrite locks are generally preferable to
+ * plain Sync locks or synchronized methods in cases where:
+ * <ul>
+ *   <li> The methods in a class can be cleanly separated into
+ *        those that only access (read) data vs those that 
+ *        modify (write).
+ *   <li> Target applications generally have more readers than writers.
+ *   <li> The methods are relatively time-consuming (as a rough
+ *        rule of thumb, exceed more than a hundred instructions), so it
+ *        pays to introduce a bit more overhead associated with
+ *        ReadWrite locks compared to simple synchronized methods etc
+ *        in order to allow concurrency among reader threads.
+ *        
+ * </ul>
+ * Different implementation classes differ in policies surrounding
+ * which threads to prefer when there is
+ * contention. By far, the most commonly useful policy is 
+ * WriterPreferenceReadWriteLock. The other implementations
+ * are targeted for less common, niche applications.
+ *<p>
+ * Standard usage:
+ * <pre>
+ * class X {
+ *   ReadWriteLock rw;
+ *   // ...
+ *
+ *   public void read() throws InterruptedException { 
+ *     rw.readLock().acquire();
+ *     try {
+ *       // ... do the read
+ *     }
+ *     finally {
+ *       rw.readlock().release()
+ *     }
+ *   }
+ *
+ *
+ *   public void write() throws InterruptedException { 
+ *     rw.writeLock().acquire();
+ *     try {
+ *       // ... do the write
+ *     }
+ *     finally {
+ *       rw.writelock().release()
+ *     }
+ *   }
+ * }
+ * </pre>
+ * @see Sync
+ * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>]
+
+**/
+
+public interface ReadWriteLock {
+  /** get the readLock **/
+  Sync readLock();
+
+  /** get the writeLock **/
+  Sync writeLock();
+}
+