Yazan: Şadi Evren ŞEKER

Bilgisayar mühendisliğinde, birbirinde ayrı işlerin kontrolü için kullanılır. Aynı anda çalışan işlerin birbirinden tamamen ayrı olması için (mutually exclusive), bazı kontrollerin yapılması gerekmektedir. Algoritma bu problemi aşağıdaki şekilde çözer.

Yukarıdaki kodda, iki adet paylaşılmış değişken (shared variable) kullanılmış ve bu değişkenlere hem P0 hem de P1’in erişebileceği kabul edilmiştir. İki işlem (process) arasında senkronizasyonu sağlamak için kullanılan bu flag ve turn değişkenleri, P1 için aşağıdaki şekilde kontrol edilir.

Dikkat edilirse, P0 için yazılan kod, turn değişkeninin değeri 1 iken beklemekte ve P1 için yazılan kod ise turn değişkeni 0 iken beklemektedir. Bekleme işlemleri kodların 5. Satırlarında yapılmaktadır. Bekleme işlemi için kontrol edilen ikinci bir değer ise flag değişkeninin değeridir. Flag değişkeni, çalışmakta olan işlemlerin kritik alana girmek istememeleri durumunda boşuna beklemelerini engeller. Örneğin P0, kritik alana girmek istemiyorsa bu durumda P1’in kritik alana girmek için bir kontrol yapmasına gerek yoktur çünkü zaten kritik alana erişecek başka bir işlem de yoktur.

Sistemde kilitlenme (deadlock) ihtimali bulunmaz. Bunun sebebi turn isimli değişkenin anlık olarak 1 veya 0 değerlerinden birisine sahip olacağıdır. Bu değer, hangi işlemin çalışacağını belirler dolayısıyla aynı anda iki işlemin bekleme veya çalıma ihtimali yoktur.

Buradaki bekleme işlemi meşgul bekleme (busy wait) olarak kodlanmıştır. Yani değişkenlerin değerleri kontrol edilerek döngü sürekli olarak dönmektedir. Değişken değerleri, diğer işlem (process) tarafından değiştirildiğinde döngü kırılır ve kritik alan başlar. Bir işlem (process) değişken değerini değiştirip, beklemede olan diğer işlemin çalışabileceği sinyalini verirken aslında kendisinin çalışamayacağını da kodlamış olur. Dikkat edilirse, koddaki turn==0 kontrolü yapılmadan önce turn = 0 veya benzer şekilde turn==1 kontrolü yapılmadan önce turn=1 ataması yapılmaktadır.

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


× altı = 42