How can I convert this puedocode to an actual Java program. This is code for rea
ID: 3715187 • Letter: H
Question
How can I convert this puedocode to an actual Java program. This is code for readers/writers solution using semaphores (operating systems).
Puedocode:
/Readers Solution
int readcount;
semaphore x = 1, wsem = 1;
void reader() {
while (true) {
semWait (x);
readcount++;
if(readcount == 1)
semWait (wsem);
semSignal (x);
READUNIT();
semWait (x);
readcount--;
if(readcount == 0)
semSignal (wsem);
semSignal (x);
}
}
void writer() {
while (true) {
semWait (wsem);
WRITEUNIT();
semSignal (wsem);
}
}
void main() {
readcount = 0;
parbegin (reader, writer);
}
//Wiriters solution using Semaphore
int readcount,writecount; semaphore x = 1, y = 1, wsem = 1, rsem = 1;
void reader() {
while (true) {
semWait (z);
semWait (rsem);
semWait (x);
readcount++;
if (readcount == 1)
semWait (wsem);
semSignal (x);
semSignal (rsem);
semSignal (z);
READUNIT();
semWait (x);
readcount--;
if (readcount == 0) semSIgnal (wsem);
}
}
void writer () {
while (true) {
semWait (y);
writecount++;
if (writecount == 1)
semWait (rsem);
semSignal (y);
semWait (wsem);
semWait (y);
writecount--;
if (writecount == 0) semSignal (rsem);
semSignal (y);
}
}
void main() {
readcount = writecount = 0;
parbegin (reader, writer);
}
Explanation / Answer
import java.util.Random; import java.util.concurrent.Semaphore; import java.util.logging.Level; import java.util.logging.Logger; public class ThreadSync { private static ThreadSync thrdsync; private static Thread t1, t2, t3, t4, t5; private static final Random rand = new Random(); private static Semaphore sm = new Semaphore(2, true); String text = "lets start study on chegg"; private void busy() { try { Thread.sleep(rand.nextInt(1000) + 1000); } catch (InterruptedException e) { } } void write(String sentence) { System.out.println(Thread.currentThread().getName() + " started to WRITE"); text += " " + sentence; System.out.println(text); System.out.println("end of the study "); System.out.println(Thread.currentThread().getName() + " finished WRITING"); } void read() { System.out.println(" " + Thread.currentThread().getName() + " started to READ"); System.out.println(text); System.out.println("End of Book "); } private class Writer implements Runnable { ThreadSync ts; Writer(String name, ThreadSync ts) { super(); this.ts = ts; } public void run() { while (true) { try { sm.acquire(); } catch (InterruptedException ex) { Logger.getLogger(ThreadSync.class.getName()).log(Level.SEVERE, null, ex); } String new_sentence = new String(" new topic to study"); busy(); ts.write(new_sentence); sm.release(); } // of while } } private class Reader implements Runnable { ThreadSync ts; Reader(String name, ThreadSync ts) { super(); this.ts = ts; } public void run() { while (true) { try { sm.acquire(); } catch (InterruptedException ex) { Logger.getLogger(ThreadSync.class.getName()).log(Level.SEVERE, null, ex); } //System.out.print(t); busy(); ts.read(); sm.release(); } // of while } } public void startThreads() { ThreadSync ts = new ThreadSync(); t1 = new Thread(new Writer("Writer # 1", ts)); t2 = new Thread(new Reader("Reader # 1", ts)); //t3 = new Thread(new Reader("Writer # 2", ts)); t4 = new Thread(new Reader("Reader # 2", ts)); //t5 = new Thread(new Reader("Reader # 3", ts)); t1.start(); t2.start(); t4.start(); //t3.start(); //t4.start(); //t5.start(); } public static void main( String[] args) { thrdsync = new ThreadSync(); System.out.println("Lets begin... "); thrdsync.startThreads(); } }
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.