Prosesler Arası Klasik Problemler
Tags: beginners, programming, tutorial, computerscience
Published: 2022-03-10 20:40:59

Prosesler arası paylaşımda oluşacak farklı durumları gözleme ve semafor tabanlı çözüm üretimi.

## 1. Üretici - Tüketici Problemi
Üreticiler ürünleri ortaya koyar, tüketiciler ortak alandaki ürünleri kullanılır.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p97g2lxc3ok9lcydj3fm.png)
  

- Ortak alana (dizi ile) erişim karşılıklı dışlamayla olmalı. Mutex
- Alan boşsa (hazır ürün yoksa) tüketici beklemeli. Senkronizasyon
- Alan doluysa üretici belemeli. Karşılıklı Dışlama ikili semafordur. Meşgul Semaforu
- Boş ve doluları gösteren alanda sayma semaforu kullanılır.

Üretici boş göz olup olmadığına bakar, yoksa bekler. Dolu ise ortak alana gelir lambayı yakar, Ortak alana girer ürünü alır. İşaretçiyi bir sonraki dolu göz için kaydırır lamba söndürülüp çıkarılır. Tüketici çıkınca üretici ortak alana girer. Üretici ve tüketici birbirlerini engellemez ve karşılıklı dışlanırlar.

## 2. Okuyucu - Yazıcı Problemi
Bir veriye okuyucular ve yazıcılar erişir, yazıcı değişiklik okuyucu okumaktadır.

- Üreticinin farkı okuyucular veriyi alamaz okurlar. Veriler Ortak alanda. (kritik bölge)
- Yazma yapılırken yazıcı sadece ortak alandadır. Yazıcılar veri semaforu üzerinde sonsuza kadar bekleyebilir. (Çözüm = ek geçiş semaforu)
- Okuyucular yazıcılara göre önceliklidir. (Çözüm = okuyucular yazıcılara izin vermeli.)

Yazıcı proses erişimden önce P (geçiş)'i çağırır, her yeni okuyucu prosesi geçiş semaforunu kontrol edip sonra geçiş semaforunu işaretler. Kritik bölgeye girmek isteyen yazıcı proses varsa yeni gelen okuyuculardan önce veriye erişme şansı olur.

## 3. Makarna Yiyen Düşünürler
Yuvarlak masa tabaklar arası çatal, her kişi iki çatalla yemek yiyebiliyor. Hiçbir düşünür aç kalmadan en fazla sayıda yemek yemeli ve ortak kaynaklar ölümcül kilitlenme olmadan paylaştırılmalı.

- Ölümcül kilitlenme = Çatal isteğinin asla kabul edilmemesi, sürekli bekletilme ve ertelenme. (Indefinite postponement) Sol çatalı herkes alırsa kimse sağ alamaz.
- Durum = Yan yana iki düşünür aynı anda yiyemez.

Sol çatalı al, sağ çatalı al, yemek ye, sol çatalı bırak, sağ çatalı bırak. Her düşünüre ikili semafor. Yemek isteyip çatal alamayınca bloke olur. // Sol çatalı alan sağı kontrol eder, sağı alamıyorsa solu da bırakır. (Aynı anda yaparlarsa ölümcül kilitlenme.)

## 4. Uyuyan Berber Problemi
1 berber 1 koltuk ve N bekleme koltuğu, müşteri yoksa berber uyur. Müşteri gelince berberi uyandır. Berber meşgulken gelen müşteri yer varsa bekler yoksa gider.

- 3 semafor gerekli. Müşteri (bekleyen müşteri sayısı), Berber (boş berber sayısı), dışla (karşılıklı dışlama için.)

Berber proses başlayınca müşteri var mı diye müşteri semaforunda bekler, yoksa uyur. Varsa sıra koltuğundan berber koltuğuna, bekleyen azalır. Berber semaforu serbest olur ve saçı keser. Müşteri prosesi içeri gelince başka müşteri gelmesin diye dışlama yapar ve boş koltuğu kontrol eder, varsa bekleyen sayısı artar. Berber uyuyorsa uyanması için müşteri semaforunu serbest bırakır. Başka müşteri gelsin diye dışlama semaforu bırakılır. Berber semaforu serbest kalana kadar bekler, kestirir saçını.

Kaynaklar: https://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem
https://en.wikipedia.org/wiki/Dining_philosophers_problem
https://en.wikipedia.org/wiki/Sleeping_barber_problem
https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem