Penghindaran terhadap deadlock adalah cara penanganan yang selanjutnya. Inti dari penghindaran adalah jangan sembarangan membolehkan proses untuk memulai atau meminta lagi. Maksudnya adalah, jangan pernah memulai suatu proses apabila nantinya akan menuju ke keadaan deadlock. Kedua, jangan memberikan kesempatan pada proses untuk meminta sumber daya tambahan jika penambahan tersebut akan membawa sistem pada keadaan deadlock. Tidak mungkin akan terjadi deadlock apabila sebelum terjadi sudah kita hindari.
Langkah lain untuk menghindari adalah dengan cara tiap proses memberitahu jumlah kebutuhan maksimum untuk setiap tipe sumber daya yang ada. Selanjutnya terdapat deadlock-avoidance algorithm yang secara rutin memeriksa state dari sistem untuk memastikan tidak adanya kondisi circular wait serta sistem berada pada kondisi safe state. Safe state adalah suatu kondisi dimana semua proses mendapatkan sumber daya yang dimintanya dengan sumber daya yang tersedia. Apabila tidak bisa langsung, ia harus menunggu selama waktu tertentu, kemudian mendapatkan sumber daya yang diinginkan, melakukan eksekusi, dan terakhir melepas kembali sumber daya tersebut. Terdapat dua jenis algoritma penghindaran yaitu resource-allocation graph untuk single instances resources serta banker's algorithm untuk multiple instances resources.
Algoritma penghindaran yang pertama yaitu resource-allocation graph akan dijelaskan secara mendalam pada bab selanjutnya yaitu Diagram Graf. Untuk algoritma yang kedua yaitu banker's algorithm akan dibahas pada bab ini dan dilengkapi oleh pembahasan di bab selanjutnya.
Dalam banker's algorithm, terdapat beberapa struktur data yang digunakan, yaitu:
Available . Jumlah sumber daya yang tersedia.
Max . Jumlah sumber daya maksimum yang diminta oleh tiap proses.
Allocation . Jumlah sumber daya yang sedang dimiliki oleh tiap proses.
Need . Sisa sumber daya yang masih dibutuhkan oleh proses, didapat dari max- allocation.
Kemudian terdapat safety algorithm untuk menentukan apakah sistem berada pada safe state atau tidak.
Contoh 23.2. TestAndSet
01 work dan finish adalah vektor yang diinisialisasi:
work = available
finish[i] = FALSE untuk i= 1,2,3,..,n-1.
02 cari i yang memenuhi finish[i] == FALSE dan needi <= work
jika tak ada, ke tahap 04
03 work = work + allocationi
finish [i] = TRUE
kembali ke tahap 02
04 jika finish[i]==TRUE untuk semua i, maka sistem safe state.
Terdapat juga algoritma lainnya yang menentukan apakah proses boleh melakukan permintaan terhadap sumber daya tambahan atau tidak. Algoritma yang bertujuan memastikan sistem tetap pada keadaan safe state ini dinamakan resource-request algorithm.
Contoh 23.3. TestAndSet
Request = sumber daya yang dibutuhkan proses Pi. Pada request,
Pi membutuhkan k instances dari Rj.
01 Jika Requesti <= Needi, ke tahap 02.
Selain itu error karena melebihi maximum permintaan
02 Jika Requesti <= Available, ke tahap 03.
Selain itu Pi harus menunggu karena tidak tersedia
03 Ubah kondisi state setelah request dikabulkan
Available = Available - Requesti
Allocationi = Allocationi + Requesti
Needi = Needi - Requesti
if safe => sumber daya dialokasikan pada Pi
if unsafe => Pi menunggu, state kembali sebelumnya
Algoritma-algoritma tersebut bertujuan untuk menghindarkan sistem dari terjadinya deadlock. Keadaan dimana sistem bebas dari deadlock disebut safe state. Jadi, semua kebutuhan proses akan sumber daya terpenuhi. Dampaknya adalah sistem tidak mengalami deadlock. Selain safe state, terdapat pula keadaan unsafe state. Pada keadaan ini, sistem mempunyai kemungkinan untuk berada pada kondisi deadlock. Sehingga cara yang paling jitu untuk menghindari deadlock adalah memastikan bahwa sistem tidak akan pernah mengalami keadaan unsafe state.