Readers-Writers & The Dining Philosophers Problem Maharmon Arnaldo Api Perdana Contact: apiperdana@gmail.com
Pembahasan Masalah Readers-Writers Program Readers-Writers Solusi Readers-Writers Masalah The Dining Philosopher Semafor Sebagai Solusi Solusi Masalah The Dining Philosoper
Readers - Writers Terdiri dari dua proses: Readers, yang berfungsi sebagai pembaca Writers, yang berfungsi sebagai pembaca dan penulis Kedua proses berbagi sumber daya penyimpanan yang sama Masalah: Adanya beberapa pembaca dan penulis yang ingin mengakses suatu berkas secara bersamaan Tujuan: data tidak menjadi korupsi
Kondisi Readers - Writers Pembaca dapat membaca secara simultan Hanya boleh ada satu penulis pada suatu saat Bila ada yang menulis, tidak boleh ada yang membaca
public class Reader extends Thread { public Reader(int r, Database db) { readernum = r; server = db; public void run() { int c; Readers while (true) { //System.out.println("reader " + readernum + " is sleeping."); Database.napping(); System.out.println("reader " + readernum + " wants to read."); c = server.startread();
Readers (2) // you have access to read from the database System.out.println("reader " + readernum + " is reading. Reader Count = " + c); Database.napping(); System.out.print("reader " + readernum + " is done reading. "); c = server.endread(); //System.out.println("reader " + readernum + " is done reading. Count = " +c); private Database private int readernum; server;
Writers public class Writer extends Thread { public Writer(int w, Database db) { writernum = w; server = db; public void run() { while (true) { //System.out.println("writer " + writernum + " is sleeping."); Database.napping(); System.out.println("writer " + writernum + " wants to write."); server.startwrite();
Writers (2) // you have access to write to the database System.out.println("writer " + writernum + " is writing."); Database.napping(); System.out.println("writer " + writernum + " is done writing."); server.endwrite(); //System.out.println("writer " + writernum + " is done writing."); private Database server; private int writernum;
Solusi Readers - Writers Pembaca Diprioritaskan Penulis Diprioritaskan Pembaca Dan Penulis Mendapat Prioritas yang sama
Solusi Dengan Pembaca Diprioritaskan Bisa terjadi Starvation untuk proses Writer public void mulaimembaca(){ mutex.tunggu(); npembaca++; if (npembaca == 1) brks.tunggu(); mutex.sinyal(); public void selesaimembaca(){ mutex.tunggu(); --npembaca; if (npembaca == 0) brks.sinyal(); mutex.sinyal(); public void mulaimenulis(){ brks.tunggu(); public void selesaimenulis(){ brks.sinyal();
Solusi Dengan Penulis Diprioritaskan Dapat menyebabkan starvation untuk proses Reader. public void mulaimembaca(){ mutex1.tunggu(); baca.tunggu(); mutex2.tunggu(); npembaca++; if (npembaca == 1) tulis.tunggu(); mutex2.sinyal(); baca.sinyal(); mutex1.sinyal(); public void selesaimembaca(){ mutex2.tunggu(); npembaca--; if (npembaca == 0) tulis.sinyal(); mutex2.sinyal();
Solusi Dengan Penulis Diprioritaskan (2) public void mulaimenulis(){ mutex3.tunggu(); npenulis++; if (npenulis == 1) baca.tunggu(); mutex3.sinyal(); tulis.tunggu(); public void selesaimenulis(){ tulis.sinyal(); mutex3.tunggu(); npenulis--; if (npenulis == 0) baca.sinyal(); mutex3.sinyal();
Solusi Dengan Pembaca Dan Penulis Mendapat Prioritas Sama Ada kemungkinan terjadi antrian yang panjang
Dining Philosophers
Dining Philosophers Merupakan masalah klasik sinkronisasi karena menjadi contoh bagi masalah concurrencycontrol pada tingkat yang lebih tinggi Representasi sederhana atas kebutuhan untuk mengalokasikan sumber daya kepada beberapa proses tanpa terjadi deadlock maupun starvation Diketahui sejumlah (N) filsuf yang hanya memiliki tiga kondisi; berpikir, lapar, dan makan duduk pada meja bundar Di antara para filsuf terdapat satu buah sumpit dan di tengah meja terdapat semangkuk mie
Dining Philosophers (2) Yang harus diperhatikan: Deadlock: Semua filsuf ingin makan dan telah memegang sumpit Starvation: Ada filsuf yang kelaparan dalam waktu yang lama
Semafor Solusi yang mungkin langsung terlihat adalah dengan menggunakan semafor. Setiap sumpit mewakili sebuah semafor. Jika filsuf ingin mengambil sumpit, ia jalankan perintah wait Jika filsuf ingin meletakkan kembali sumpit, ia jalankan perintah signal
Semafor (2) var chopstick: array [0..4] of semaphore; repeat wait (chopstick [i]); wait (chopstick [i + 1 mod 5 ]); eat signal (chopstick [i]); signal (chopstick [i + 1 mod 5 ]); think until false
Kelemahan Semaphor Low Level Karena tersebar di seluruh program, maka sulit dalam pemeliharaannya Error yang terjadi sulit untuk dideteksi Lebih baik menggunakan high-level construct Dapat terjadi deadlock!
Solusi Dining Philosophers Filsuf hanya bisa mengambil sumpit jika kedua sumpit di sampingnya ada Menggunakan solusi asimetris Jumlah filsuf pada suatu meja maksimal adalah empat Menggunakan Monitor