class MRSW { int n = 0; SRSW V[] = null;// value written for reader i SRSW Comm[][] = null; // communication between readers int seqNo = 0; public MRSW(int readers, int initVal) { n = readers; V = new SRSW[n]; for (int i = 0; i < n; i++) V[i].setValue(initVal, 0); Comm = new SRSW[n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) Comm[i][j].setValue(initVal, 0); } public int getValue(int r) {//reader r reads //read your own register SRSW tsv = V[r]; // tsv is local // find the value with the largest timestamp for (int i = 0; i < n; i++) if (Comm[i][r].getTS() > tsv.getTS()) tsv = Comm[i][r]; // inform other readers for (int i = 0; i < n; i++) { Comm[r][i].setValue(tsv); } return tsv.getValue(); } public void setValue(int x) {// accessed by the writer // write the value with a larger timestamp seqNo++; for (int i = 0; i < n; i++) V[i].setValue(x, seqNo); } }