WikiStart: Reader.txt

File Reader.txt, 2.2 KB (added by 152071, 5 years ago)
Line 
1import java.util.Random;
2import java.util.concurrent.Semaphore;
3
4import static mk.ukim.finki.os.synchronization.exam17.s3.g1.Reader.lock;
5
6public class Reader extends Thread {
7
8 public static Random random = new Random();
9 public static Semaphore lock = new Semaphore(1);
10 public static Semaphore signal = new Semaphore(0);
11
12 public static void main(String[] args) throws InterruptedException {
13 // TODO: kreirajte Reader i startuvajte go negovoto pozadinsko izvrsuvanje
14 Reader reader = new Reader();
15 reader.start();
16
17 for (int i = 0; i < 100; i++) {
18 Writer writer = new Writer();
19 //TODO: startuvajte go writer-ot
20 writer.start();
21
22 }
23
24
25 // TODO: Cekajte 10000ms za Reader-ot da zavrsi
26 reader.join(10_000);
27
28 // TODO: ispisete go statusot od izvrsuvanjeto
29 if (reader.isAlive()) {
30 System.out.println("reader will be interrupted");
31 reader.interrupt();
32 } else {
33 System.out.println("reader is done");
34 }
35
36 }
37
38 /**
39 * Ne smee da bide izvrsuva paralelno so write() metodot
40 */
41 public static void read() {
42 System.out.println("reading");
43 }
44
45
46 public void run() {
47 int pendingReading = 100;
48 while (pendingReading > 0) {
49 pendingReading--;
50 try {
51 // TODO: cekanje na nov zapisan podatok
52 signal.acquire();
53
54 lock.acquire();
55 // TODO: read() metodot ne smee da se izvrsuva paralelno so write() od Writer klasata
56 read();
57 lock.release();
58 } catch (InterruptedException e) {
59 e.printStackTrace();
60 break;
61 }
62 }
63
64 System.out.println("Done scheduling!");
65 }
66}
67
68
69class Writer extends Thread {
70
71 public Integer duration;
72
73 public Writer() throws InterruptedException {
74 this.duration = Reader.random.nextInt(1000);
75 }
76
77
78 /**
79 * Ne smee da bide povikan paralelno
80 */
81 public static void write() {
82 System.out.println("writting");
83 }
84
85 @Override
86 public void run() {
87 try {
88 Thread.sleep(this.duration);
89
90 lock.acquire();
91 write();
92 lock.release();
93 Reader.signal.release();
94 } catch (InterruptedException e) {
95 e.printStackTrace();
96 }
97 }
98}