Kim korkar Semaphore’dan

Merhabalar,

Senkronizasyon (synchronization) mekanizmalarından biri olan Semaphore’la ilgili bir örnek yapacağız.

Basit bir dille anlatmak gerekirse, Birden fazla işin (process) aynı anda çalıştığında birbirleri için risk oluşturabileceği anlarda (critical sections) ,  diğer işleri bekletmesini sağlatan bir mekanizma türüdür.

Bir hayali örnek ile ilerleyelim açıkçası ben alaylı olduğum için mantığını biraz geç anladım Tuğrul bey sağ olsun yardımcı oldu, Biz şimdi Semaphore’u bir berber dükkanı olarak hayal edelim.

Bir berber dükkanı açmak istedik ve parayı bulduk berber dükkanı açtık. OpenSemaphore(SEMAPHORE_ALL_ACCESS, false,PWideChar(‘yhackup’));

 

Semaphore berber dükkanımız küçük olduğu için şimdilik 5 koltuk koyabildik, ve Sabah dükkanı açtık 5 koltuğun 5’ide boş. CreateSemaphore(nil, 5, 5, PWideChar(‘yhackup’)

 

5 koltuğu olan bir berberde bir koltuğa 2 kişi oturamaz veya bir berber 2 kişiyi traş edemez , aynı ipte iki cambaz oynamaz.

Her bir berber(TThread) bir kişi alarak traşını yapar, yeni gelen saçı sakalı birbirine karışmış bireyler sırasını bekler. WaitForSingleObject(MySemaphore, INFINITE);

 

Her bir berberin bir kişiyi traş etmesi 5 saniye sürer. Sleep(5000); 

 

Traş olan kişi parasını öder koltuktan kalkar ReleaseSemaphore(MySemaphore, 1, nil); ve 1 kişilik yer açılır. yeni Müşteri gelir.

 

Kodlara geçmeden sistemin nasıl çalıştığını gösteren bir video izleyelim.

 

 

Kalın Sağlıcakla…

yhackup

Site Kurucusu & Yöneticisi Yazılım Geliştiricisi

Bir cevap yazın

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