Challenge 5

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Challenge 5

Mesaj gönderen sadettinpolat »

Challengelar icinde senkronizasyon , semaphore , ipc gibi kavramlar gecince aklima direkt bu konularla alakali meshur sorular geldi ve bende bunlarla ilgili bir challenge acip biraz beyin firtinasi yapariz belki diye dusundum :)

Bu challenge'ta ki amac calisan bir kod yazmaktan ziyade en uygun nasil yapilabilir seklinde algoritma tasarlamak ve ayni zamanda bu meshur sorular ile ilgili bilgisi olmayan merakli arkadaslar icinde google da arastiracak bazi anahtar kelimeler saglamak.

Challeng 5 ' in temel konusu Challenge 4 ile benzer. Prosessler arasinda iletisim saglamak ve bu iletisim sirasinda proseslerin olumcul kilitlenme (dead lock) ve kaynak acligina (Starvation) yol acmasini engellemek.

Meshur ilk problemimiz Sleeping Barber (Uyuyan Berber) Problemi

Resim

Bir berber dükkanı n adet bekleme sandalyesi ve bir de berber koltuğundan oluşmaktadır.

-Eğer traş edilecek müşteri yoksa berber uyumaktadır.
-Eğer bir müşteri geldiğinde bütün bekleme sandalyeleri dolu ise müşteri dükkanı terk eder.
-Eğer müşteri geldiğinde berber başka bir müşteriyi traş ediyorsa, buna karşılık boş bekleme sandalyesi varsa müşteri kuyruğa girip sandalyeye oturur.
-Berber uyuduğu zaman müşteri berberi uyandırmaktadır.

Bu problemi delphi ile cozmek isteseydiniz nasil bir yapi kullanirdiniz ? :alsana:

Olasi problemler

musteri dukkana girer berberin sac kesmekte oldugunu gorur ve bekleme salonuna dogru hareket eder
tam bu esnada berber elindeki isi bitirip sirada bekleyen bir musteri var mi diye bekleme odasina goz atar ve bekleyen herhangi bir musterinin olmadigini gorur
bekleyen musteri olmadigi icin berber uyumaya gider
bekleme salonuna gecen musteri berberin uyumaya gittiginden habersiz berberin isinin bitmesini bekler

musteri bekleyen berber ve berber bekleyen musteri. deadlock'a dustuk hayirli olsun :)

benzer problemlerle ilgili merakli arkadaslar icin

Filozofların Akşam Yemeği Problemi
Tek Şeritli Köprü Problemi
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Challenge 5

Mesaj gönderen esistem »

Şahsen benim böyle dükkanım olsa öncelikle bekleme salonuna giren kapıyı veya bekleme salonuna giden koridoru berber koltuğunun yanından geçirirm ki giren müşteriyi görebileyim :) yok eğer berber koltuğunun bulunduğu odaya giriş kapısı ile bekleme salonun giriş yapısı aynı değilse; salona bilet (ticket) sistemi kurarım, giren müşteri bileti alır beklemeye başlar, bu esnada traş ettiğim müşterinin biletide benim elimde olur, bekleme salonundan alınan son bilet numarasınıda berber koltuğunun bulunduğu odadaki bi ekrandan görürüm, eğer bendeki son numara ekranda yazıyorsa işim bitince uyurum, yok eğer bendeki numara ekrandaki numaradan küçükse işim bitince "sıradakiiiii" diye bağırırım :)
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Challenge 5

Mesaj gönderen sadettinpolat »

esistem yazdı:Şahsen benim böyle dükkanım olsa öncelikle bekleme salonuna giren kapıyı veya bekleme salonuna giden koridoru berber koltuğunun yanından geçirirm ki giren müşteriyi görebileyim :)
Burda bilgisayardan cok biraz insan gibi dusunmusuz. Koridor berber koltugunun yanindan gectigi durumda insan olarak siz hem trasinizi yaparken hem de yaninizdan gecen musteriyi fark edebilirsiniz lakin prosesslerin boyle bir yetenegi yoktur. Sadece bir islem yapar. Tras ederken yanindan gecen musteriyi algimasi icin prosessin de sizin gibi multithread calisabilmesi lazim :)

bilet sistemini cozum yollarindan biri kabul edebiliriz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 5

Mesaj gönderen thelvaci »

Söz hakkımız var mı Sadettinim ? Challange sahibi sen olduğun için sana sormak istedim, belki vereceğimiz bir cevap Challange'ın amacının dışına çıkmasına neden olabilir; ya da heyacanını kaçırtabilir, bu nedenle sorayım istedim.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Challenge 5

Mesaj gönderen sadettinpolat »

Challenge ile hedefledigim amac farkindalik olusturmakti. Ben amacima ulastim :) yorumlara acigiz tugrul abi
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Challenge 5

Mesaj gönderen esistem »

Hmmm. demekki çözüm multithread çalışan bir berber dükkanı (proses) yapmak :) Traş ederken ve uyurken çalışan bir thread oluşturup, sürekli salonu kontrol edersek bu işi çözmüş oluruz :) alternatif olsun buda.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 5

Mesaj gönderen thelvaci »

Challange 4'e gidip son attığım örnek üzerinden 64 bitlik tanımı yapmaya çalışın da ben de yeni bir challange daha açabileyim :) Bu arada elbette senin challange güme gitmesin diye bekleyebilirim de ;)
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 5

Mesaj gönderen thelvaci »

Yorum yapalım demiştim ama sen challange'ın başında faydalanılabilecek tüm linkleri vermişsin zaten. Wikipedia linkinde zaten sorun hakkında detay ve çözüm önerileri var. Bu ne biçim challange :D

Gerçi orada semaphore'lardan bahsetmiş ama biz hemen hemen tüm senkronizasyon nesnelerini kullanarak elde edebiliriz istenen sonucu. Asıl thread deadlocking bundan sonraki challenge'ım olacaktı. Daha sık karşılaşılan bir senaryodan bahsedeceğim ;)
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Challenge 5

Mesaj gönderen sadettinpolat »

elin hintlisi bile bu problemler ile ilgili video hazirlamis , turkce bir tane videoya denk gelmedim :(

https://www.youtube.com/watch?v=QTIXr4C ... KM&index=6 - Sleeping Barber problem
https://www.youtube.com/watch?v=4AXS5jE ... KM&index=4 - Cigarette Smokers Problem
https://www.youtube.com/watch?v=4Lu7Emn ... KM&index=5 - Readers Writers Problem
https://www.youtube.com/watch?v=M3CNoX8wetM - Dining Philosopher problem
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 5

Mesaj gönderen thelvaci »

sadettinpolat yazdı:elin hintlisi bile bu problemler ile ilgili video hazirlamis , turkce bir tane videoya denk gelmedim :(

https://www.youtube.com/watch?v=QTIXr4C ... KM&index=6 - Sleeping Barber problem
https://www.youtube.com/watch?v=4AXS5jE ... KM&index=4 - Cigarette Smokers Problem
https://www.youtube.com/watch?v=4Lu7Emn ... KM&index=5 - Readers Writers Problem
https://www.youtube.com/watch?v=M3CNoX8wetM - Dining Philosopher problem
Çok güzel. Teşekkür ederim. Maksadımımız zaten bu tarz sorunların oluşmasını engellemek. Birden fazla reader tek writer için pek fazla bilinmeyen bir Delphi sınıfını incelemesini önerebilirim arkadaşlarımızın. Elbette kendileri de implemente edebilirler ama implemente edilmiş bir örnekde faydalı olabilir.

System.SysUtils.TMultiReadExclusiveWriteSynchronizer
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 5

Mesaj gönderen thelvaci »

Aslında bu tarz etkinlikleri üniversitelerde düzenlemeleri lazım, işletim sistemleri derslerinde. Eğer var ise bu tarz videolar bizim üniversitelerimizce çekilmiş izlemekten memnuniyet duyarız ;)
Cevapla