Anda di halaman 1dari 6

Deadlock

Prinsip dari deadlock Deadlock ialah suatu kondisi permanen dimana proses tidak berjalan lagi ataupun tidak ada komunikasi lagi antar proses. Deadlock disebabkan karena proses yang satu menunggu sumber daya yang sedang dipegang oleh proses lain yang sedang menunggu sumber daya yang dipegang oleh proses tersebut. Atau dengan kata lain setiap proses dalam set menunggu untuk sumber yang hanya bisa dikerjakan oleh proses lain dalam set yang sedang menunggu. Contoh yang paling mudah ialah gambar berikut ini:

Gambar 1 Contoh Deadlock Sederhana

Pada gambar diatas, tidak ada yang dapat maju karena keduanya memperebutkan jalan yang sama ( yang dilingkari ), demikian juga deadlock saat semua proses memperebutkan sumber yang sama. Contoh lain yang dapat merepresentasikan deadlock ialah jembatan gantung sebagai berikut :

Gambar 2. Contoh Deadlock di Jembatan Gantung

sehingga orang yang ada di sebelah kiri jembatan tidak dapat melaju sebab terjadi deadlock di tengah jembatan ( bagian yang dilingkari ).Contoh lain ialah di persimpangan jalan jalan berikut ini:

Gambar 4-4. Contoh Deadlock di Persimpangan Jalan Dalam kasus ini setiap mobil bergerak sesuai nomor yang ditentukan,tetapi tanpa pengaturan yang benar, maka setiap mobil akan bertemu pada satu titik yang permanen( yang dilingkari )atau bisa dikatakan bahwa setiap mobil tidak bisa meanjutkan perjalanan lagi atau dengan kata lain terjadi deadlock. Contoh lain pada proses yang secara umum terdiri dari tiga tahap, yaitu untuk meminta, memakai, dan melepaskan sumber daya yang di mintanya.

Contoh kode-nya (1) :


public class Proses {
public synchronized void getA() { //proses untuk mendapat sumber daya a } public synchronized void getB(){ //proses untuk mendapat sumber daya b } public void releaseA(){ //proses untuk melepaskan sumber daya a } public void releaseB(){ //proses untuk melepaskan sumber daya b } }

public class Coba {


public static void main(String [] args) { Proses P = new Proses(); Proses Q = new Proses(); P.getA(); Q.getB(); P.getB(); Q.getA(); }

Contoh kode-nya (2) :


tanpa adanya perintah untuk mereleased artinya saat P mendapatkan A dan Q mendapatkan B, tetapi tidak dilepaskan, maka saat P minta B dan Q minta A, maka keduanya akan saling menunggu hingga salah satu melepaskan sumber dayanya, sedangkan kebutuhan P ada pada Q dan Q ada pada P, sehingga terjadi deadlock. Secara umum kejadian ini dapat mudah terjadi dalam pemrograman multi-thread. Sebab ada kemungkinan lebih besar untuk menggunakan sumber daya bersama.