Philosophers

Philosophers

Kullanılan Teknolojiler

Proje Kazanımları

Bu projede, bilgisayar bilimlerinin eşzamanlılık (concurrency) problemlerini çözmek amacıyla thread yönetimi ve senkronizasyon mekanizmaları C dilinde tasarlanmıştır.

  • Thread Yönetimi: POSIX threads (pthread) kütüphanesi kullanılarak çoklu iş parçacığı yönetimi sağlandı.
  • Mutex Entegrasyonu: Paylaşılan ortak kaynakların (çatalların) güvenliği için mutex kilitleri kullanıldı.
  • Deadlock & Starvation Çözümü: Filozofların birbirini kilitlemesini engelleyen hassas zamanlama algoritmaları kuruldu.
  • C Bellek Optimizasyonu: Bellek sızıntısı (leak) olmaksızın, milisaniye düzeyinde hassas performans elde edildi.
README.md Dosyasını Görüntüle

Philosophers - 42 Okulu Projesi

Philosophers

Bu proje, bilgisayar bilimlerinin klasik eşzamanlılık (concurrency) problemlerinden biri olan "Yemek Yiyen Filozoflar Problem" üzerine kurulmuştur. Temel amacı; thread (iş parçacığı) yönetimi, mutex (karşılıklı dışlama) kullanımı ve veri yarışmalarından (data race) kaçınma konularında uzmanlaşmaktır.

📝 Proje Amacı

Belirli sayıda filozof bir masa etrafında oturur. Filozoflar hayatları boyunca üç şey yaparlar: yemek yemek, uyumak ve düşünmek. Masanın ortasında bir kase spagetti ve her filozofun arasında birer tane olmak üzere toplam filozof sayısı kadar çatal bulunur. Bir filozofun yemek yiyebilmesi için hem solundaki hem de sağındaki çatalı (toplam 2 çatal) alması gerekir.

Zorluk: Filozofların birbirini kilitlemeden (deadlock) ve açlıktan ölmeden (starvation) hayatta kalmalarını sağlamaktır.

🚀 Kurulum ve Çalıştırma

Gereksinimler

  • GCC veya Clang derleyicisi
  • Make
  • POSIX uyumlu bir işletim sistemi (Linux/macOS/WSL)

Derleme

Projenin kök dizininde (Philosophers klasörü) aşağıdaki komutu çalıştırarak çalıştırılabilir dosyayı oluşturabilirsiniz:

make

Temizleme

Obje dosyalarını ve çalıştırılabilir dosyayı silmek için:

make fclean

🛠️ Kullanım

Programı çalıştırmak için aşağıdaki formatta argümanlar vermeniz gerekir:

./philo [filozof_sayısı] [ölme_süresi] [yemek_süresi] [uyuma_süresi] [öğün_sayısı(isteğe_bağlı)]

Parametre Açıklamaları:

  1. filozof_sayısı: Masadaki filozof ve çatal sayısı.
  2. ölme_süresi (ms): Bir filozof son yemeğinin başlangıcından itibaren bu süre içinde yemek yemezse ölür.
  3. yemek_süresi (ms): Bir filozofun yemek yemesi için geçen süre (bu sürede 2 çatalı tutar).
  4. uyuma_süresi (ms): Bir filozofun yemek yedikten sonra uyuması için geçen süre.
  5. öğün_sayısı (opsiyonel): Eğer belirtilirse, tüm filozoflar en az bu kadar öğün yediğinde simülasyon durur. Belirtilmezse simülasyon bir filozof ölene kadar devam eder.

Örnek Çalıştırma:

./philo 5 800 200 200

(5 filozof, 800ms ölme sınırı, 200ms yemek yeme, 200ms uyuma)

🔍 Teknik Detaylar

  • Threadler: Her filozof kendine ait bir iş parçacığında (thread) çalışır.
  • Mutexler: Her çatal, aynı anda iki filozofun kullanmasını önlemek için birer mutex tarafından korunur. Ayrıca ekrana yazdırma ve veri güncelleme işlemleri de yarışma durumlarını (race conditions) önlemek için mutex ile senkronize edilmiştir.
  • Deadlock Önleme: Filozofların çatalları alma sırası veya başlangıç zamanlarının kaydırılması (staggering) gibi yöntemlerle kilitlenme durumları engellenmiştir.

👨‍💻 Hazırlayan

Bu proje yayiker (Ecole 42 öğrencisi) tarafından geliştirilmiştir.