www.fatihkabakci.com

Personal Website and Computer Science TUR EN

URETICI TUKETICI PROBLEMI

Last update: 9/18/2012 7:37:00 AM

Yazan:Fatih KABAKCI

Bilgisayar bilimlerinde klasik problemler içerisinde yer alan Üretici & Tüketici Problemi(Producer & Consumer Problem),bir dizinin veya kuyruğun içerisinde yer alan elemanların karşılıklı iki semafor tarafından senkronize bir şekilde kullanılmasını tanımlamaktadır.

Burada üretici(producer) semafor,datayı belirli bir miktarda üreterek alanı terkederek ve sırayı tüketici(consumer)'ye bırakır.Tüketici ise belirli miktarda üretilen datayı belirli miktarda tüketerek buffer alanını terkeder.Burada dikkat edilmesi gereken temel nokta üreticinin buffer size miktarını aşmaksızın data üretmesi gerekirken,tüketicinin ise 0 data miktarının altında kalmaksızın datayı tüketmesi gerektiği gerçeğidir.Aksi halde CPU gereksiz yere işgal edilecektir.
Üretici & Tüketici(Producer & Consumer) problemini modellemek için aşağıdaki gereksinimler göz önünde bulundurulmalıdır.
  1. En az bir üretici
  2. En az bir tüketici
  3. En az bir ortak buffer alanı
Bu listenin donanımsal karşılığı ise,
  1. En az iki process(üretici ve tüketici için)
  2. En az bir ortak bellek alanı(buffer size için)
  3. Bir işlemci
Problemi daha iyi anlamak için aşağıdaki senaryoyu inceleyelim.

Örnek bir senaryo

Bu senaryomuzda bir araba yıkama firmasına sahip olduğumuzu düşünelim.Firmamız şimdilik çok küçük ve sadece 1 oto yıkama garajı var.Bu garaj ise aynı anda sadece bir arabayı içine alabiliyor.Biz üretici olarak çeşitli arabalar'ı garaja alarak onları yıkıyoruz.Müşteriler ise yıkama işleminden sonra arabalarını garajdan çıkarıp firmadan ayrılıyorlar.Bu senaryoyu bilgisayar literatürüne göre betimlersek,
  • Sahip olduğumuz oto garajı aslında bir 1 datalık bellek alanı.Buradaki data ise 1 araba.
  • Biz oto yıkama olarak bir üreticiyiz.Bu üretimi otoları yıkamak olarak düşünün.
  • Müşteriler ise tüketici.Bu tüketimi ise müşterilerin araçlarını alıp uzaklaşmaları olarak düşünün.
Yukarıda anlatılan bu örnek senaryonun Java programlama dilindeki karşılığı ise aşağıdaki gibi olacaktır.






Programın oluşturduğu çıktının bir bölümü ise aşağıdaki gibidir.


Programda bulunan Car sınıfı arabaların ismini ve rengini tanımlayan,yani bizim datalarımızı temsil eden bir sınıftır.

CarQueue sınıfı,bizim 1 araba büyüklüğündeki garajımızı temsil etmektedir.Biz üretici olarak bu garaj'a araba alıp yıkarız ve müşteri bu garajdan arabasını alır.Sınıfın tasarımı teknik olarak açıklanırsa,senkronize iki metot tanımlanmıştır(takeCar ve washCar).Tüketici ve üretici arasında trafik ışığı görevi gören isWash boolean değeri ise true iken tüketicinin arabasını almasını,yani arabanın yıkanmış olmasını,belirtirken,isWash değerinin false olması,üreticinin arabayı üretmesini,yani garaja alıp yıkama işlemine başlamasını,belirtmektedir.

notify() ve wait() metotları

Bunun için Java içerisinde mevcut üretici ve tüketici thread'lerini askıya alan ve uyandıran wait() ve notify() metotlarından yararlanılmıştır.
  • wait() metodu mevcut kanalı bir sonraki notify() bildirimi gelene kadar uyuturken,
  • notify() ise,wait() ile uyutulan kanalı uyandıran bir metottur.
CarQueue sınıfını incelemeye devam edersek,takeCar(Car) metodu içerisindeki isWash değeri true iken çağıran kanal uyutulur.Bu değer false iken ise data üretilmiş olup,true değerini alarak,daha önceki uyutulan consumer kanalı notify() ile uyandırılmış olacaktır.Bir sonraki çağrımda ise isWash true değerini aldığı için wait durumuna geçecektir.Bu anlatılanlar ise aynen ters perspektif ile washCar() metodunda da cereyan edecektir.

ThreadTakeCar ve ThreadWashCar adında iki thread sınıfı ise gereklidir.Çünkü bu sınıflar birer process gibi davranacak ve yukarıda anlatılan işlemleri gerçek anlamda uygulayacaklardır.İki sınıfta sonsuz döngü içerisinde sırasıyla üretim ve tüketim yaparak CPU'u paylaşımlı kullanacaktır.Hatırlanacak olursa,senaryomuzdaki kuyruk uzunluğu 1'dir ve üretilen her data peşinen hemen tüketilmektedir.

Son olarak main metodu içerisinde,ilk olarak carQ adında bir kuyruk yaratılmaktadır.ThreadTakeCar ve ThreadWashCar sınıflarıda aynı kuyruk ile oluşturularak,ortak bellek alanını sembolize etmiş olacaklardır.
MemberCommentDate:
Fatih KABAKCI
Merhaba,

Eleştiriniz için teşekkürler. Kod bloğunda anlamadığınız ve kafa karıştıran noktaları belirtirseniz açıklamaya çalışırım.

Başarılar

2015 cialis coupon mba-institutes.com cialis 2015 coupon
pfizer viagra coupon viagra coupon codes coupons for viagra printable
free coupon for cialis lilly cialis coupons cialis discount coupons online
losartankalium teva 50 mg losartan pro medicin losartan medical valley
lamisil cream singapore myjustliving.com lamisil cream
abilify maintena site abilify and coke
4/2/2016 5:56:00 PM
guest
hoş güzel de insanlar bilmediği için buraya bakıyor zaten siz gelip de böyle uzun kafa karıştırıcı kod yazarsanız hoş olmaz

ada
pfizer viagra coupon viagra coupon codes coupons for viagra printable
can i take antabuse and naltrexone can i take antabuse and naltrexone can i take antabuse and naltrexone
free coupon for cialis discount coupons for cialis cialis discount coupons online
online cialis coupons prescription savings card coupons for drugs
kamagra jelly chamceul.ind.ws kamagra ára
3/30/2016 11:16:00 PM
comertkubi1
Teşekkürler emeğinize sağlık çok faydalandım .
canada drug pharmacy coupon link walgreen coupons online
lasix 100mg betamethasone 0.05% dapoxetine 30mg
pfizer viagra coupon blog.alpacanation.com coupons for viagra printable
cialis coupon card cialis sample coupon coupon for cialis
nizoral emulsiovoide nizoral kokemuksia nizoral tabletti
1/2/2015 11:13:00 AM

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.