Definisi Dining Philosopher

Definisi Dining Philosopher

1. Sejarah Dining Philosopher
Masalah ini pertama ini pertama kali ditulis dan diselesaikan oleh Djikstra pada tahun 1965. Masalah ini memodelkan masalah enkapsulasi dari ketergantungan mesin dan masalah portabilitas.

2. Ilustrasi Dining Philosopher
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.

    Pada awalnya, semua filusuf akan berpikir selama waktu yang tidak tentu. Setelah berpikir lama, filusuf akan merasa lapar. Pada saat lapar, ia berusaha untuk mengambil 2 buah sumpit yang ada di kanan dan di kirinya untuk makan. Dia mengambil sumpitnya satu per satu. Begitu ia mendapat sebuah sumpit, ia tidak akan melepaskannya. Jika ia hanya berhasil mengambil kurang dari 2 sumpit, maka ia akan menunggu sampai 2 sumpit diambil. Begitu dia mendapatkan 2 sumpit, maka dia akan makan mienya untuk sementara waktu dan kemudian meletakkan kedua sumpitnya. Kedua sumpit ini kemudian dapat digunakan oleh filusuf-filusuf yang lain.
Posisi meja Filsuf dengan menggunakan semafor. Setiap sumpit mewakili sebuah semafor. Kemudian, ketika seorang filsuf lapar, maka dia akan mencoba mengambil sumpit di kiri dan dikananya atau dengan kata lain dia akan menunggu sampai kedua sumpit itu dapat digunakan. Setelah selesai makan,sumpit diletakan kembali dan sinyal diberikan ke semafor sehingga filusuf lain yang membutuhkan dapat menggunakan sumpitnya. Dan dia sendiri kemudian kembali berpikir.
Tujuan dari masalah ini adalah untuk mencari cara sehingga para filusuf tidak akan pernah mati kelaparan. Hal ini juga merupakan salah satu representasi dari pengalokasian source komputer yang terbatas dengan beberapa proses sehingga dapat mengakibatkan deadlock dan starvation.
    Salah satu solusi yang mungkin langsung terlihat adalah dengan menggunakan semafor. Setiap sumpit mewakili sebuah semafor. Kemudian, ketika seorang filusuf lapar, maka dia akan mencoba mengambil sumpit di kiri dan di kanannya, atau dengan kata lain dia akan menunggu sampai kedua sumpit tersebut dapat ia gunakan. Setelah selesai makan, sumpit diletakkan kembali dan sinyal diberikan ke semafor sehingga filusuf lain yang membutuhkan dapat menggunakan sumpitnya
  • 5 philosophers yang kerjanya hanya makan dan berfikir
  • Tersedia lima piring mie dan lima sumpit
  • Untuk makan dibutuhkan bua buah sumpit
  • Problem-nya bagaimana cara menulis program agar setiap philosopher dapat berfikir dan makan tanpa harus saling menunggu ?
    Permasalahan dining-philosophers digambarkan pada gambar dibawah ini dimana terdapat 5 filosof yang akan makan. Di sana disediakan 5 supit. Jika filosof lapar, ia akan mengambil 2 supit yaitu di tangan kanan dan kiri. Namun adakalanya hanya diambil supit satu saja. Jika ada filosof yang mengambil 2 supit, maka ada filosof yang harus menunggu sampai supit tersebut diletakkan. Hal ini dapat diimplementasikan dengan wait dan signal.
     Meskipun solusi ini menjamin bahwa tidak ada 2 tetangga yang makan bersama-sama, namun masih mungkin terjadi deadlock, yaitu jika tiap-tiap filosof lapar dan mengambil supit kiri, maka semua nilai supit = 0, dan jika kemudian tiap-tiap filosof akan mengambil supit kanan, maka akan terjadi
deadlock.
Ada beberapa cara untuk menghindari deadlock, antara lain :
1. Mengijinkan paling banyak 5 orang filosof yang duduk bersama-sama pada satu meja
2. Mengijinkan seorang filosof mangambil supit hanya jika kedua supit itu ada (dengan catatan,  bahwa ia harus mengambil pada critical section)
3. Menggunakan suatu solusi asimetrik, yaitu filosof pada nomor ganjil mengambil supit kanan dulu baru supit kiri. Sedangkan filosof yang duduk di kursi genap mengambil supit kanan dulu baru supit kiri.
Share