⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readerthread.java

📁 Reader Writer Problem to solve synchronization issues
💻 JAVA
字号:
public class ReaderThread extends Thread {  private int tnum,rdata;		// thread number (>= zero)//  private Integer rc;  private static int rc;  private Semaphore[] flags;  private Boolean[] continuous;  private Semaphore db;  private Semaphore mutex;  private Data_base dtbas;   private CodeWin win;  private Gui xyz;//  private static final String a="INITIAL",b="MUTEX",c="RC",d="DB",e="DBASE";  public ReaderThread(int n, Semaphore[] s, Boolean[] b, int c,			Semaphore mut,Semaphore dbas, Data_base rdtbase, 							CodeWin w, Gui xy) {    tnum = n;    flags = s;    continuous = b;    rc = c;//	System.out.println("initia rc value of "+tnum+":"+rc);    mutex=mut;    db=dbas;    dtbas=rdtbase;    win = w;    xyz = xy;  }  public void run() {    while (true) {/*---------------------------------------------------------*/      //         DOWN(MUTEX);      // If we are in continuous mode and this thread's step       // flag is false, wait      if (continuous[0].booleanValue() == false)	flags[tnum].down();      // When we get here, the step flag is true; thus we can take      // (at least) one step      	xyz.start_to_mutex_db(tnum);      	win.step(tnum);	mutex.down();	xyz.mutex_lock(tnum);/*---------------------------------------------------------*/      //	RC=RC+1;      if (continuous[0].booleanValue() == false)	flags[tnum].down();       rc = rc+ 1;      xyz.rc_plus_minus(tnum,rc);      win.step(tnum);//	System.out.println("inc rc value of "+tnum+":"+rc);      /*---------------------------------------------------------*/      //	IF(RC=1) THEN;       if (continuous[0].booleanValue() == false)         flags[tnum].down();        win.step(tnum);      if (rc == 1) {      if (continuous[0].booleanValue() == true)	xyz.rc_one_zero(tnum,2);      else	xyz.rc_one_zero(tnum,1);	/*---------------------------------------------------------*/      //	  DOWN(DB);	if (continuous[0].booleanValue() == false)	  flags[tnum].down();	xyz.rc_reset();      	xyz.rc_one_db(tnum);	win.step(tnum);	db.down();      	xyz.db_lock(tnum);/*----------*/      //	  UP(MUTEX);	if (continuous[0].booleanValue() == false)	  flags[tnum].down();	xyz.db_down_to_mutex(tnum);	win.step(tnum);	xyz.mutex_unlock(tnum,1);	mutex.up();      } else {/*---------------------------------------------------------*/      //	  UP(MUTEX);	if (continuous[0].booleanValue() == false)	  flags[tnum].down();	xyz.rc_not_one_zero(tnum);	win.step(tnum,2);	xyz.mutex_unlock(tnum,1);	mutex.up();      }/*---------------------------------------------------------*/      //      READ_DB();      if (continuous[0].booleanValue() == false)	flags[tnum].down();	xyz.read_dbase(tnum);      win.step(tnum);      rdata=dtbas.readdb();	xyz.dbase_data(tnum,rdata);/*---------------------------------------------------------*/      //      DOWN(MUTEX);      if (continuous[0].booleanValue() == false)	flags[tnum].down();	xyz.dbase_to_mutex(tnum);      win.step(tnum);      mutex.down();	xyz.mutex_lock(tnum);      /*---------------------------------------------------------*/      //	RC=RC-1;      if (continuous[0].booleanValue() == false)	flags[tnum].down();//      rc = new Integer(rc.intValue() - 1);      rc = rc - 1;	xyz.rc_plus_minus(tnum,rc);      win.step(tnum);      /*---------------------------------------------------------*/      //	IF(RC=0)THEN;      if (continuous[0].booleanValue() == false)	flags[tnum].down();      win.step(tnum);//      if (rc.intValue() == 0) {      if (rc == 0) {      if (continuous[0].booleanValue() == true)	xyz.rc_one_zero(tnum,2);      else	xyz.rc_one_zero(tnum,1);	/*---------------------------------------------------------*/      //	  UP(DB);	if (continuous[0].booleanValue() == false)	  flags[tnum].down();	xyz.rc_zero_db(tnum);	win.step(tnum);	xyz.db_unlock(tnum);        db.up();/*----------*/      //	  UP(MUTEX);	if (continuous[0].booleanValue() == false)	  flags[tnum].down();	xyz.db_up_to_mutex(tnum);	win.step(tnum);	xyz.mutex_unlock(tnum,2);	mutex.up();      } else {/*---------------------------------------------------------*/      //	  UP(MUTEX);	if (continuous[0].booleanValue() == false)	  flags[tnum].down();	xyz.rc_not_one_zero(tnum);	win.step(tnum,2);	xyz.mutex_unlock(tnum,2);	mutex.up();      }/*---------------------------------------------------------*/            if (continuous[0].booleanValue() == false)	flags[tnum].down();      win.step(tnum);      yield();    }  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -