Üye Kayıt Üye Giriş

Semaforlar


Semaforlar

Mutex Unix/Linux ve Win32 sistemlerinde thread tarafından ele geçirilen senkronizasyon
nesnesidir. Oysa bazı durumlarda bir kritik koda tek bir kişi değil, örneğin n değişik kişinin
girmesi istenebilir. Semaforlar bu bakımdan mutex nesnelerinin sayaçlı biçimleridir.


Semaforlar aşağı yukarı tüm işletim sistemlerinde benzer kullanıma sahiptir. Semafora girmek
ile çıkmak biçiminde iki kavram vardır. Semaforların bir sayacı bulunur. Bu sayaç başlangıçta
semaforu yaratan kişi tarafından set edilir. Bir kod semafora girdiğinde sayaç azaltılır,
çıktığında artırılır. Bir kod semafora girerken işletim sistemi semafor sayacına bakar. Sayaç
0’dan büyükse girme hakkını elde eder ve sayaç bir eksiltilir. Sayaç 0 ise semafora girmek
isteyen kod semafor içerisinde bloke edilir. Başka bir kod semafordan çıktığında sayaç
artırılır. Bekleyen kodlardan en yüksek öncelikli olan kod semafora giriş sağlar. Böylece
mutex’lerde olduğu gibi kritik koda sadece tek bir kişi değil, aynı anda n kişi girebilmektedir.
Win32 sistemlerinde semafor CreateSemaphore API fonksiyonuyla yaratılır. Yaratan kişi
sayacı belirler. Kritik kod WaitForXXX ile ReleaseSemaphore fonksiyonları arasına alınır.
WaitForXXX fonksiyonları semafor sayacı 0’dan büyükse azaltma işlemini yapıp kritik koda
giriş işlemini yaparlar. Semafor sayacı 0 ise WaitForXXX fonksiyonları threadi çizelge dışı
bırakmaktadır. ReleaseSemaphore fonksiyonu semafor sayacını artırmaktadır.
WaitForSingleObject(hSemphore, INFINITE);
// ...
ReleaseSemaphore(hSemaphore, 1);

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER