Anda di halaman 1dari 3

3.

5 Masalah Klasik Sinkronisasi dan Solusinya


3.51 Masalah Buffer yang terbatas (Bounded Buffer Problem)
Masalah ini dikenal juga sebagai Producer-Consumer problem karena melibatkan dua
proses, dimana satu proses berperan sebagai produsen data, dan proses lainnya berperan
sebagai konsumen. Kedua proses ini menggunakan bersama sebuah buffer yang memiliki
kapasitas terbatas. Produsen meletakkan data pada buffer dan konsumen memindahkan data
dari buffer.
 Ketika buffer penuh, maka produsen masuk ke kondisi tidur. Setelah data
dipinahkan oleh konsumen, maka produsen dibangunkan dan menjalankan
aktivitasnya kembali.
 Ketika buffer kosong, maka konsumen masuk ke kondisi tidur. Setelah produsen
meletakkan data, maka konsumen dibangunkan kembali.
Seandainya buffer kosong dan konsumen baru saja mengeksekusi baris 23. Kerena kondisi
pada baris 23 terpenuhi (count = 0), maka eksekusi berikutnya adalah baris 24, diamana
konsumen akan masuk ke kondisi tidur (sleep). Namun sebelum konsumen mengeksekusi baris
24, scheduler mengirimkan interrupt ke konsumen sehingga konsumen harus menunda
prosesnya.
Setelah konsumen di-interrupt, kontrol akan dipindahkan ke produsen. Produsen akan
meletakkan data pada buffer dan menambahkan nilai variabel count (baris 12 dan 13). Karena
variabel count sekarang bernilai 1. Akibatnya konsumen akan berada dalam keadaan tidur.
Produsen akan mengisi buffer sampai kemudian akan tidur juga (baris 11). Produsen dan
konsumen akan tidur selamanya.
Masalah ini dapat dipecahkan dengan menggunakan semafor. Dengan menggunakan
semafor binner, mutex, produsen dan konsumen tidak akan mengakses buffer secara
bersamaan. Untuk sinkronisasi digunakan variabel filled dan empty. Variabel ini diperlukan
untuk menjamin bahwa urutan kegiatan tertentu akan terjadi atau tidak. Perlu diperhatikan
pula bahwa urutan operasi V dan P harus benar.

3.5.2 Masalah Makan Malam Peneliti (Dining Philospohers Problem)


Bayangkan 5 orang peneliti yang sedang duduk melingkar pada sebuah meja makan. Di
antara seiap peneliti terdapat sebuah sumpit. Peneliti menghabiskan waktu mereka dengan
makan dan berpikir .Ketika peneliti lapar, maka ia akan mengambil sumpit yang terletak
disebelah kanan dan kirinya. Setelah mendapatkan kedua sumpit, peneliti akan makan . Setelah
selesai makan, ia akan meletakkan sumpit pada meja, dan melanjutkan berpikir
Salah satu pendekatan yang dilakukan untuk memecahkan masalah ini adalah dengan
mempresentasikan setiap sumpit dengan semafor. Namun seandainya seluruh peneliti ingin
makan secara bersamaan dan kemudian mereka mengambil sumpit yang teretak disebelah kiri
mereka, maka tidak ada peneliti yang dapat memperoleh sumpit kanan. Hal ini akan
menyebabkan terjadinya deadlock. Bila peneliti diharuskan meletakkan sumpit kiri bila sumpit
kanan tidak dapat diperolehnya, hal itu akan memecahkan masalah pula.
Sebuah solusi yang mungkin adalah dengan hanya mengijinkan paling banyak empat
peneliti untuk duduk pada meja. Solusi lainnya adalah dengan menggunakan asimetri, yaitu
dengan memiliki dua tipe peneliti, peneliti yang selalu mengambil sumpit sebelah kanan
terlebih dahulu, dan peneliti yang selalu mengambil sumpit sebelah kiri terlebih dahulu.
Dengan memiliki minimal satu orang untuk masing-masing tipe peneliti yang duduk dalam
satu meja, maka pengaturan tempat duduk yang bagaimanapun akan dapat menghindari
deadlock dan starvation.
Contoh 3.5 solusi yang mungkin untuk masalah Makan Malam Peneliti
Semaphore chopstick[5] ={1,1,1,1,1};

Void philosopher {int i} // i identifies philosopher


{
while (true) {
think( ); // think for a while

p (chopstick [ i ] ); // pick up left chopstick

p (chopstick [(i+1)%5] ; // pick up right chopstick


eat( ) ; // eat for a while
v(chopstick [ (i+1) %5] ) ; // drop right chopstick
v(chopstick[ i ] ) ; // drop left chopstick
}
}

3.6 Monitor
Pada awal tahun 1970-an , dibuatlah monitor yang diperkenalkan oleh Brinch Hansen dan
Hoare. Monitor adalah tipe data abstrak yang mengenkapsulasi sekumpulan variabel dan
operasi yang menggunakan variabel-variabel tersebut. Setiap variabel bersifat private dan
hanya dapat diakses oleh operasi yang terdapat dalam satu monitor dengan variabel tersebut.
Hal utama pada monitor adalah hanya satu proses/thred yang dapat aktif pada satu monitor
pada satu waktu. Secara implisit, ekslusi mutual dilakukan oleh compiler bahasa pemograman
yang mendukung implementasi monitor (yaitu dengan menggunakan semafor). Dengan
demikian, programmer tidak perlu memikirkan masalah ekslusi mutual dan pemrograman
menjadi lebih mudah.
Monitor memilki sebuah vitur tambahan, yaitu Variabel kondisi (condition variable).
Variabel ini akan memblok proses yang tidak dapat dialnjutkan atau mengaktifkan proses yang
telah diblok sebelimnya yang ingin masuk ke monitor. Variabel kondisi tidak menyimpan
informasi mengenai jumlah proses yang sedang menunggu. Hal inilah yang membedakan dari
semafor.
Monitor mengikuti semantik signal1 dan wait atau signal1 dan continue. Misalnya proses
P, memanggil signal (X) kemudian proses P2 memanggil wait (X). Dengan signal dan wait, P1
akan dijalankan, dan P2 menunggu sampai P1 melepaskan monitor. Dengan signal dan
continue, P2 akan dilanjutkan, dan P1 yang menunggu. Skema signal dan continue dikemukakan
oleh Brinch Hanser. Skema ini akan memberikan kinerja yang lebih baik dibandingkan signal
dan wait karena context switch yang terjadi lebih sedikit.
Monitor lebih mudah diterapkan bila dibandingkan dengan semafor, tetapi hanya tersedia
dalam sedikit bahasa pemrograman saja, salah satunya adalah java. Setiap class pada java
memiliki properti yang menyerupai monitor bila method dideklarasikan sebagai synchronized.
Variabel kondisi tidak diberi nama, tetapi objek memiliki variabel kondisi implisit yang dapat
dimanipulasi dengan menggunkan method wait() dan notify(). Dalam hal ini digunakan
pendekatan penggunaan sinyal atau teruskan (continue).
Masalah sesungguhnya pada semafor dan monitor adalah ketergantungan mereka pada
memori bersama (shared memory) sehingga keduanya sulit diterapakan pada distributed
system.

Anda mungkin juga menyukai