📄 readerthread.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 + -