User Tools

Site Tools


calendar

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
calendar [2009/04/26 19:40] franckcalendar [2009/05/14 21:04] (current) franck
Line 85: Line 85:
 ===== March 31 ===== ===== March 31 =====
  
-A solution to the readers-writers problem using semaphores in Java+Implementations in Java of the reader-writers problem can be 
-First, a Reader. +found [[readers-writers|here]].
-<code java> +
-package semaphore; +
-  +
-import java.util.Random; +
-import java.util.concurrent.Semaphore; +
-  +
-/** +
- * A reader+
- * +
- * @author Franck van Breugel +
- */ +
-public class Reader extends Thread +
-+
-  private static int readers = 0; +
-  private static final Semaphore mutex = new Semaphore(1); +
-      +
-  /** +
-   * Initializes this reader. +
-   */ +
-  public Reader() +
-  { +
-    super(); +
-  } +
-                                                                                 +
-  /** +
-   * Reads. +
-   */ +
-  public void run() +
-  { +
-    try +
-    { +
-      Reader.mutex.acquire(); +
-      Reader.readers++; +
-      if (Reader.readers == 1) +
-      { +
-        Writer.writer.acquire(); +
-      } +
-      Reader.mutex.release(); +
-      // read +
-      Reader.mutex.acquire(); +
-      Reader.readers--; +
-      if (Reader.readers == 0) +
-      { +
-        Writer.writer.release(); +
-      } +
-      Reader.mutex.release(); +
-    } +
-    catch (InterruptedException e) {} +
-  } +
-+
-</code> +
-Then, a Writer. +
-<code java> +
-package semaphore; +
-  +
-import java.util.Random; +
-import java.util.concurrent.Semaphore; +
-  +
-/** +
- * A writer. +
- * +
- * @author Franck van Breugel +
- */ +
-public class Writer extends Thread +
-+
-  public static final Semaphore writer = new Semaphore(1, true); +
-     +
-  /** +
-   * Initializes this writer. +
-   */ +
-  public Writer() +
-  { +
-    super(); +
-  } +
-      +
-  /** +
-   * Writes. +
-   */ +
-  public void run() +
-  { +
-    try +
-    { +
-      Writer.writer.acquire(); +
-      // write +
-      Writer.writer.release(); +
-    } +
-    catch (InterruptedException e) {} +
-  } +
-+
-</code> +
-And finally an app. +
-<code java> +
-package semaphore; +
-  +
-/** +
- * This app creates a number of readers and writers. +
- +
- * @author Franck van Breugel +
- */ +
-public class ReadersWriters +
-+
-  /** +
-   * @param args[0] numbers of readers+
-   * @param args[1] number of writers+
-   */ +
-  public static void main(String[args) +
-  { +
-    try +
-    { +
-      int readers = Integer.parseInt(args[0]); +
-      int writers = Integer.parseInt(args[1]); +
-      for (int i = 0; i < writers; i++) +
-      { +
-        new Writer().start(); +
-      } +
-      for (int i = 0; i < readers; i++) +
-      { +
-        new Reader().start(); +
-      } +
-    } +
-    catch (Exception e) +
-    { +
-      System.out.println("Usage: java ReadersWriters < number of readers> <number of writers>"); +
-    } +
-  } +
-+
-</code> +
- +
-Below, we present another solution to the readers-writers problem. +
-<code java> +
-/** +
- * This class represents a database.  There are many  +
- * competing threads wishing to read and write.  It is  +
- * acceptable to have multiple processes reading at the  +
- * same time, but if one thread is writing then no other  +
- * process may either read or write. +
- */ +
-public class Database +
-+
-  private int readers; // number of active readers +
-  +
-  /** +
-   * Initializes this database. +
-   */ +
-  public Database() +
-  { +
-    this.readers = 0; +
-  } +
-  +
-  /** +
-   * Read from this database. +
-   */ +
-  public void read(int number) +
-  { +
-    synchronized(this) +
-    { +
-      this.readers++; +
-    } +
-    // read +
-    synchronized(this) +
-    { +
-      this.readers--; +
-      if (this.readers == 0) +
-      { +
-        this.notifyAll(); +
-      } +
-    } +
-  } +
-  +
-  /** +
-   * Writes to this database. +
-   */ +
-  public synchronized void write(int number) +
-  { +
-    while (this.readers != 0) +
-    { +
-      try +
-      { +
-        this.wait(); +
-      } +
-      catch (InterruptedException e) {} +
-    } +
-    // write +
-    this.notifyAll(); +
-  } +
-+
-</code>+
  
 ===== April 2 ===== ===== April 2 =====
Line 331: Line 144:
 Willem Visser, Klaus Havelund, Guillaume Brat, SeungJoon Park and Flavio Lerda. [[http://dx.doi.org/10.1023/A:1022920129859|Model Checking Programs]]. //Automated Software Engineering//, 10(2): 203-232, April 2003.  Willem Visser, Klaus Havelund, Guillaume Brat, SeungJoon Park and Flavio Lerda. [[http://dx.doi.org/10.1023/A:1022920129859|Model Checking Programs]]. //Automated Software Engineering//, 10(2): 203-232, April 2003. 
  
-More information about Java PathFinder can be found  + 
-[[jpf:start|here]].  +
  
 ===== May 7 ===== ===== May 7 =====
 +
 +More information about Java PathFinder can be found 
 +[[jpf:start|here]]. 
  
 ===== May 12 ===== ===== May 12 =====
 +
 +Information about handling native code with Java PathFinder can be found 
 +[[jpf-native:start|here]]. 
  
 ===== May 14 ===== ===== May 14 =====
calendar.1240774859.txt.gz · Last modified: 2009/04/26 19:40 by franck

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki