The Critical Section Problem – Algorithm III Di dalam suatu sistem terdapat n proses yang saling bersaing untuk menggunakan data. Masing-masing proses tersebut mempunyai kode segmen yang disebut Critical Section. Critical Section adalah bagian dari suatu proses yang akan melakukan akses dan memanipulasi data. Ketika suatu proses sedang dijalankan di Critical Section, maka tidak ada proses lain yang dijalankan di Critical Section. Critical Section biasanya digunakan dalam program multithreading, dimana dalam program tersebut terdapat banyak thread dan akan mengubah suatu nilai dari variabel. Dalam hal ini, Critical Section diperlukan agar melindungi variabel dari concurrent acces (akses program secara bersamaan) yang dapat membuat nilai suatu variabel itu berubah-ubah. Suatu proses itu dapat bekerja secara sendiri (independent process) namun juga dapat bekerja bersama proses-proses yang lain (cooperating process). Pada saat Cooperating Process, maka dapat dipastikan bahwa proses-proses tersebut akan saling berbagi data dan ada kemungkinan bahwa data yang saling dibagi secara bersama itu akan tidak konsisten karena adanya kemungkinan proses-proses tersebut melakukan akses secara bersama yang menyebabkan data tersebut dapat berubah. Hal ini disebut Race Condition. Oleh karena itu, dibutuhkan sebuah solusi untuk menghindari adanya Race Condition dan solusi ini harus memenuhi tiga persyaratan berikut : 1. Mutual Exclusion Jika proses Pi masuk dalam Critical Section, maka tidak ada proses lain yang masuk ke dalam Critical Section. Critical Section sebaiknya terfokus dan pendek Tidak memasuki infinite loop 2. Progress Jika tidak ada proses yang masuk ke dalam Critical Section dan terdapat beberapa proses yang ingin masuk ke dalam Critical Section, maka pemilihan proses yang akan masuk ke dalam Critical Section tidak dapat ditunda antara lain : Jika hanya ada satu proses yang ingin masuk, proses ini akan masuk Jika terdapat dua atau lebih proses yang ingin masuk, maka salah satunya seharusnya dapat masuk 3. Bounded Waiting Tidak ada proses yang menunggu lama-lama untuk masuk ke dalam Critical Section. Jika ada suatu proses yang memasuki Critical Section, maka proses lain memiliki waktu tunggu yang ada batasnya untuk menjalankan Critical Section-nya. Asumsikan bahwa setiap proses dieksekusi pada kecepatan nol Tidak ada asumsi mengenai kecepatan relatif proses n Dalam hal ini, Algoritma III adalah salah satu yang memenuhi dari ketiga persyaratan yang ditentukan untuk mengatasi Critical Section.
Langkah-langkah berikut ini akan menunjukkan bahwa Mutual Exclusion harus dipertahankan. Disini terdapat dua variabel yaitu flag dan turn. Variabel flag disini menunjukkan apakah proses tersebut sudah siap untuk masuk ke Critical Section atau tidak dan variabel turn disni menunjukkan giliran proses mana yang boleh masuk ke Critical Section.
Disini Pi akan masuk ke dalam Critical Section hanya jika flag[j] bernilai false atau memberikan turn kepada Pi (turn == i).
Jika kedua proses tersebut dapat dieksekusi ke dalam Critical Section pada waktu yang bersamaan, maka flag[i] dan flag[j] bernilai benar. Namun ini bertentangan dengan persayaratan Mutual Exclusion.
Disini menunjukkan bahwa Pi dan Pj tidak dapat berhasil dieksekusi while statement/infinite loop mereka pada waktu yang sama, karena nilai turn dapat berupa I atau j, bukan keduanya.
Maka, salah satu proses ,kita asumsikan Pj ,harus berhasil mengeksekusi proses While Statement, sedangkan Pi harus mengeksekusi additional statement (dalam konteks ini adalah turn == j).
Namun pada waktu itu, selama Pj masuk ke dalam Critical Section, flag[j] bernilai true dan turn bernilai j. Dan Mutual Exclusion sudah dipertahankan.
Untuk selanjutnya akan membuktikan bahwa persayaratan Progress dan Bounded Waiting terpenuhi.
Prosses Pi dapat dicegah untuk masuk ke dalam Critical Section hanya jika ini terperangkap di dalam While Loop dengan kondisi bahwa flag[j] bernilai benar dan turn bernilai j.
Jika Pj belum siap untuk masuk ke dalam Critical Section, maka flag[j] bernilai false dan Pi dapat masuk ke dalam Critical Section.
Jika Pj sudah menetapkan falg[j] bernilai true dan ini juga mengeksekusi While Statement, lalu turn bernilai salah satu, i atau j.
Lalu jika turn bernilai i, maka Pi akan masuk ke dalam Critical Section.
Tapi, jika turn bernilai j dan Pj masuk ke Critical Section, setelah Pi keluar, ini akan mengembalikan nilai flag[j] menjadi false, lalu mempersilahkan Pi untuk masuk ke dalam Critical Section.
Jika Pj balik ke awal dan memasang kembali nilai flag[j] ke true, ini juga harus merubah nilai turn ke i dalam maksud untuk dapat ke While Statement lagi.
Dengan Pi tidak mengubah nilai dari variabel turn ketika mengeksekusi While Statement, Pi akan masuk ke dalam Critical Section setelah ada yang menunggu yaitu Pj.
Semua kondisi terpenuhi dan dengan ini masalah Critical Section sudah teratasi dengan baik karena proses-proses tidak masuk ke dalam Critical Section secara bersamaan
Referensi http://cs.uttyler.edu/Faculty/Rainwater/COSC3355/Animations/criticalsection.htm https://mediekaputra.wordpress.com/2011/03/26/critical-section/