Masalah klasik sinkronisasi
Bounded Buffer Problem
Bounded Buffer Problem adalah suatu struktur data untuk menampung (buffer) suatu nilai dimana kapasitasnya tertentu/terbatas (bounded). Masalah bounded buffer merupakan salah satu masalah yang menerangkan sinkronisasi antara proses-proses yang berjalan secara konkuren untuk mengakses data yang sama.
Masalah Bounded Buffer :
- Masalah ini digeneralisasikan dalam istilah masalah Konsumen Produsen , di mana kumpulan buffer terbatas digunakan untuk bertukar pesan antara proses produsen dan konsumen.
- Solusi untuk masalah ini adalah, membuat dua semaphore penghitungan "penuh" dan "kosong" untuk melacak masing-masing jumlah buffer penuh dan kosong saat ini.
- Dalam hal ini Produsen terutama menghasilkan produk dan konsumen mengkonsumsi produk tersebut, tetapi keduanya dapat menggunakan salah satu wadah setiap saat.
- Kompleksitas utama dari masalah ini adalah kita harus menjaga jumlah container kosong dan penuh yang tersedia.
Solusi untuk produsen adalah baik pergi tidur atau membuang data jika buffer penuh. Ketika konsumen menghapus item dari buffer, maka sistem akan memberitahu produser, yang mulai mengisi buffer lagi. Dengan cara yang sama, ketika produsen menempatkan data ke dalam buffer, maka konsumen lebih baik tidur sambail menunggu buffer terisi penuh.
Solusi dapat dicapai dengan sarana komunikasi antar-proses, biasanya menggunakan Semaphore. Sebuah solusi yang tidak memadai bisa mengakibatkan kebuntuan di mana kedua proses sedang menunggu untuk dibangunkan. Masalahnya juga dapat digeneralisasi untu memiliki beberapa produsen dan konsumen. Kita dapat menerapkan konsep semaphore untuk menyelesaikan masalah tersebut. Disini kita menggunakan tiga buah semaphore yaitu mutex, full dan empty.
- Mutex digunakan untuk menjamin hanya boleh satu proses yang berjalan mengakses buffer pada suatu waktu, awalnya dinisialisasi sebesar satu (1).
- Full digunakan untuk menghitung jumlah buffer yang berisi, yang pada awalnya diinisialisasi sebesar nol (0).
- Sedangkan empty digunakan untuk menghitung jumlah buffer yang kosong, yang awalnya dinisialisasi sebesar ukuran buffer.
Readers and Writers Problem
Readers dan writers problem adalah problem yang memodelkan beberapa proses yang mengakses database yang sama dalam satu waktu sehingga dapat menyebabkan korupsi data. Data dapat berupa buffer, objek, atau file dari suatu program. Terdapat thread yang membaca dan thread yang menulis. Thread yang membaca disebut reader, sedangkan yang menulis disebut writer. Contoh permasalahan readers and writers adalah sebuah reader sedang membaca objek, kemudian sebuah writer menulis ulang objek data tersebut maka reader akan membaca data yang tidak akurat, karena ada kemungkinan data yang terbaca adalah setengah data lama dan setengah data baru. Solusi pada permasalahan ini adalah:
- Jika terdapat satu proses menulis (mengubah) basis data, proses lain tidak boleh mengakses basis data, baik membaca atau menulis. Pada masalah ini, writers memiliki prioritas yang lebih tinggi dari pada readers. Jika ada writer yang sedang menunggu, maka tidak boleh ada reader lain yang bekerja. Writer akan memblok semua proses reading oleh readers dan melakukan proses writing. Ketika proses writing selesai, maka proses reading dapat dilanjutkan kembali oleh reader.
- Jika ada reader yang datang ketika reader lain sedang membaca dan sebuah writer sedang menunggu, maka reader yang baru datang tersebut akan langsung mendapat giliran untuk membaca. Writer akan ditunda pengerjaannya
Dining Philosophers Problem
Dining Philosophers ProlemMasalah ini pertama kali ditulis dan diselesaikan oleh Djikstra pada tahun 1965.Masalah ini memodelkan masalah enkapsulasi dari ketergantungan mesin dan masalah portabilitas. Dalam masalah Dining Philosophers, diketahui sejumlah (N) filusuf yang hanya memiliki tiga status, berpikir, lapar, dan makan. Semua filusuf berada di sebuah meja makan bundar yang ditata sehingga di depan setiap filusuf ada sebuah piring berisi mie dan di antara dua piring yang bersebelahan terdapat sebuah sumpit.Solusi Dining – Philosophers Problem ada dua, yakni :a.Solusi WaiterSolusi Waiter : solusi sederhana ini dilakukan dengan mengadakan seorang waiter yang senantiasa mengawasi penggunaan sumpit di meja makan. Ketika empat buah (dua pasang) sumpit sedang dipakai,orang berikutnya yang ingin memakai sumpit harus meminta izin kepada sang waiter, yang hanya dapat diberi ketika salah satu sumpit telah selesai terpakai.b.Solusi Hierarki ResourceSolusi Hirarki Resource: resources (sumpit) di meja makan telah diberi susunan hirarki. Setiap permintaan orang terhadap sebuah sumpit harus dilakukan pada susunan tertentu, dan dikembalikan pada susunan sebaliknya. Dalam hal ini, setiap orang dapat mengambil sumpit dimanapun diatas meja. Misalkan setiap sumpit diberi nomor sebagai tingkat hirarki dari 1 sampai 5, seseorang hanya dapat mengambil sumpit dengan nomor yang paling rendah, kemudian mengambil sumpit yang setingkat lebih tinggi. Ketika ia hendak mengembalikannya, orang itu harus meletakkan sumpit dengan nomor yang lebih tinggi terlebih dahulu, lalu yang rendah.

Tidak ada komentar:
Posting Komentar