Yazan : Şadi Evren ŞEKER
İşletim sistemlerinde çeşitli sebeplerle iki işlemin birbirini kilitlemesi durumudur. Benzer bir örnek güncel hayatta da yaşanabilir.
Örneğin Ali kapıdan geçmek için Ahmet’in önce geçmesini şart koşuyor. Benzer şekilde Ahmet de Ali’nin önce geçmesini şart koşuyor. İki kişide karşısındaki önce geçmezse geçmiyor bu durumda iki si de kapıdan sonsuza kadar geçemez ve bu durum ismi kilitlenme (deadlock)’tır.
Bu durum işletim sistemlerinde iki işlem (process) arasında sıkça yaşanır. Örneğin aşağıda semafor (semaphore )kullanılarak senkronize edilmiş iki işlemin kod örneğini inceleyelim:
Process A
{
Wait(B);
....
Signal(A);
}
Process B
{
Wait(A);
....
Signal(B);
}
Yukarıdaki örnekte Process A ve Process B isminde iki işlem bulunuyor. A işlemi B’yi, B işlemi ise A’yı bekliyor. Bu durumda ikisi de aynı anda başlayan bu işlemler kilitlenerek sonsuza kadar birbirini beklerler.
Yukarıdaki örnekte olduğu gibi işlemler arası senkranizasyon bir kilitlenme sebebidir. Ancak tek kilitlenme sebebi bu değildir. Diğer sık rastlanan bir kilitleme sebebi de kaynaklara erişimde yaşanır.
Kaynak ayrımı (resource allocation) sırasında birden fazla işlem birden fazla kaynağa erişiyorsa şöyle bir durum olabilir:
A işlemi X kaynağını kendisine almış ve Y kaynağı için sıra bekliyor olsun
B işlemi ise Y kaynağını kendisine almış ve X kaynağı için sıra bekliyor olsun
Yukarıdaki bu durumda A işlemi, Y kaynağını almadan X kaynağını bırakmayacaktır, benzer şekilde B işlemi de X kaynağına erişmeden Y kaynağını bırakmayacaktır. Dolayısıyla bu iki işlem birbirini kilitlemiş olurlar.
Kilitlenmenin (deadlock) çözülmesi için en kolay ve en etikili yol, programı yazarken kilitlenmeye engel olacak ve kilitlenme içermeyen kod yazmaktır.

gerçekten yararlı bir site bu. teşekkür ederim bilgileriniz işime fazlasıyla yaradı..