{"id":25608043,"url":"https://github.com/deryaxacar/42-philosophers","last_synced_at":"2025-04-13T13:01:52.558Z","repository":{"id":239145514,"uuid":"758480690","full_name":"deryaxacar/42-Philosophers","owner":"deryaxacar","description":"This project simulates the classic \"Dining Philosophers Problem.\" The scenario involves a group of philosophers seated around a round table, trying to eat under specific rules and constraints. As the philosophers alternate between eating and thinking, they seek to overcome issues like synchronization, deadlock, and starvation. The goal of this proj","archived":false,"fork":false,"pushed_at":"2025-02-25T16:10:48.000Z","size":1318,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T04:07:06.117Z","etag":null,"topics":["42","42-philosophers","42-school","42born2code","42cursus","42projects","42school","c","c-programming","c-programming-language","fork","philosophers","project","thread","threads"],"latest_commit_sha":null,"homepage":"https://github.com/deryaxacar/42-Philosophers","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deryaxacar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-02-16T12:17:10.000Z","updated_at":"2025-02-25T16:10:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"e0ca53ce-a96e-475b-ba8d-2fb9b2f8ddfc","html_url":"https://github.com/deryaxacar/42-Philosophers","commit_stats":null,"previous_names":["deryaxacar/42-philosophers"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Philosophers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Philosophers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Philosophers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deryaxacar%2F42-Philosophers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deryaxacar","download_url":"https://codeload.github.com/deryaxacar/42-Philosophers/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248717254,"owners_count":21150389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42","42-philosophers","42-school","42born2code","42cursus","42projects","42school","c","c-programming","c-programming-language","fork","philosophers","project","thread","threads"],"created_at":"2025-02-21T20:17:51.351Z","updated_at":"2025-04-13T13:01:52.544Z","avatar_url":"https://github.com/deryaxacar.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- Proje Başlığı --\u003e\n\u003ch1 align=\"center\"\u003e42 - Philosophers 🍽️\u003c/h1\u003e\n\n\u003c!-- Proje Açıklaması --\u003e\n\u003cp align=\"center\"\u003e\n  Bu proje, klasik \"Felsefecilerin Yemek Problemi\"ni simüle eder. Bu problem, bir grup felsefecinin yuvarlak bir masada oturup belirli kural ve kısıtlamalar altında yemek yemeye çalıştığı bir senaryoyu içerir. Felsefeciler, yemek yemek ve düşünmek için sırayla hareket ederken senkronizasyon, kilitlenme (deadlock) ve açlık (starvation) gibi problemlerin üstesinden gelmeye çalışır. Bu proje, paralel programlama, senkronizasyon ve iş parçacığı yönetimi konusunda deneyim kazanmanıza yardımcı olmayı hedefler.\n\u003c/p\u003e\n\n\u003c!-- Proje Logosu veya Görseli --\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca target=\"blank\"\u003e\u003cimg src=\"https://i.hizliresim.com/xtvqc35.png\" height=\"150\" width=\"150\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!-- Projenin Amacı --\u003e\n## Projenin Amacı 🎯\n\u003cp\u003e\n  Bu proje, iş parçacıkları arasındaki senkronizasyonu, kritik kaynaklara erişim sırasında ortaya çıkabilecek sorunları ve bu tür sorunların çözülmesini anlamanıza yardımcı olmayı amaçlar. Proje, çeşitli senkronizasyon tekniklerini ve bu tekniklerin farklı senaryolarda nasıl uygulandığını incelemenize olanak tanır.\n\u003c/p\u003e\n\n\u003cp\u003eProjenin başlıca amaçları şunlardır:\u003c/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003cstrong\u003eSenkronizasyon Mekanizmalarını Anlamak 🔄:\u003c/strong\u003e Felsefecilerin çatal paylaşımı ve senkronizasyon sırasında karşılaşabileceği problemleri analiz etmek.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eKilitlenme ve Açlığı Önlemek 🚫🍴:\u003c/strong\u003e Kilitlenme veya açlık durumlarının neden meydana geldiğini anlamak ve bunları önlemek için kullanılan teknikleri öğrenmek.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eİş Parçacığı Yönetimi 👥:\u003c/strong\u003e Paralel çalışan iş parçacıklarının kritik bölgelerde güvenli bir şekilde etkileşimde bulunmasını sağlamak.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003c!-- Proje Açıklaması --\u003e\n## Proje Açıklaması 📜\n\u003cp\u003e\n  Felsefecilerin yemek yemesi için belirli kurallar uygulanır. Bir masada oturan felsefecilerin her biri yemek yemek için yanlarındaki çatalı almak zorundadır. Ancak masada her iki felsefecinin arasında bir çatal bulunduğundan, çatal paylaşımı sırasında senkronizasyon sorunları ortaya çıkabilir. Senkronizasyon sorunları, bir veya daha fazla felsefecinin yemek yiyememesine veya düşünememesine yol açabilir.\n\u003c/p\u003e\n\n\u003cp\u003eBu projede, çeşitli senkronizasyon stratejileri kullanılarak kilitlenme ve açlık sorunları çözülmeye çalışılır. İşte bazı senkronizasyon mekanizmaları:\u003c/p\u003e\n\u003cul\u003e\n  \u003cli\u003e\u003cstrong\u003eKilitleme (Locking) 🔐:\u003c/strong\u003e Çatalın alınması ve bırakılması sırasında kilit kullanılır. Bu, aynı anda birden fazla iş parçacığının çatalı almamasını sağlar.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eSemafor 🚦:\u003c/strong\u003e Semaforlar, bir kaynağın kullanılabilirliğini kontrol etmek için kullanılır ve felsefecilerin çatalı alma sırasını düzenler.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eKritik Bölge Yönetimi ⚠️:\u003c/strong\u003e Felsefecilerin güvenli bir şekilde çatal alıp bırakmasını sağlamak için kritik bölgeler oluşturulur ve bu alanlara erişim kontrol edilir.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003c!-- Kullanım Senaryoları --\u003e\n## Kullanım Senaryoları 📝\n\u003cp\u003eBu projeyi kullanarak farklı senaryoları deneyimleyebilirsiniz. İşte bazı önerilen kullanım senaryoları ve her birinin detayları:\u003c/p\u003e\n\n### 1: Belirli Sayıda Felsefeciyle Simülasyonu Başlatma\nSimülasyonu başlatırken, felsefeci sayısını belirlemek önemlidir. Daha fazla felsefeci, senkronizasyon sorunlarını artırabilir. Önerilen kullanım adımları şunlardır:\n\n1. **Felsefeci Sayısını Seçin:** Simülasyon başlarken kaç felsefeciyle çalışacağınızı belirleyin. Felsefeci sayısı arttıkça senkronizasyon zorlukları da artar.\n2. **Simülasyonu Başlatın 🚀:** Seçilen felsefeci sayısıyla simülasyonu çalıştırın ve senkronizasyon sorunlarını gözlemleyin.\n3. **Çıktıyı Analiz Edin 🔍:** Simülasyon çıktısını inceleyin. Felsefecilerin yemek yeme ve düşünme sürelerini kontrol edin. Kilitlenme ve açlık gibi durumları gözlemleyin.\n\n### 2: Kilitleme Stratejilerini Test Etme\nFarklı kilitleme stratejilerini test etmek, kilitlenme ve açlık durumlarını önlemede yardımcı olabilir. Bu senaryoda, kilitleme tekniklerini değiştirerek felsefecilerin davranışını gözlemleyin:\n\n1. **Kilitleme Stratejisini Değiştirin 🔄:** Farklı kilitleme teknikleri kullanarak çatal alma ve bırakma süreçlerini değiştirin. Örneğin, mutex kilitleme, semafor veya başka bir senkronizasyon yöntemi kullanabilirsiniz.\n2. **Simülasyonu Tekrar Çalıştırın 🔄:** Kilitleme stratejisini değiştirdikten sonra simülasyonu yeniden çalıştırın. Felsefecilerin çatal alma davranışını ve senkronizasyonu gözlemleyin.\n3. **Sonuçları Karşılaştırın ⚖️:** Farklı kilitleme stratejileriyle elde edilen sonuçları karşılaştırın. Kilitlenme veya açlık durumlarının nasıl etkilendiğini inceleyin.\n\n### 3: Farklı Senkronizasyon Mekanizmalarını Deneyin\nSenkronizasyon sorunlarını çözmek için çeşitli mekanizmalar kullanılabilir. Bu senaryoda, farklı senkronizasyon mekanizmalarını deneyerek en iyi çözümü bulmaya çalışın:\n\n1. **Farklı Senkronizasyon Mekanizmalarını Seçin 🧩:** Mutex kilitleme, semaforlar, kritik bölgeler gibi çeşitli senkronizasyon tekniklerini kullanarak simülasyonu deneyin.\n2. **Simülasyonu Çalıştırın ve Gözlemleyin 👀:** Seçilen senkronizasyon mekanizmasıyla simülasyonu çalıştırın. Felsefecilerin davranışını gözlemleyin ve senkronizasyon sorunlarını analiz edin.\n3. **En İyi Mekanizmayı Belirleyin 🥇:** Çeşitli senkronizasyon mekanizmalarının sonuçlarını karşılaştırın. En iyi senkronizasyon stratejisini bulmaya çalışın.\n\n## 4: Senkronizasyon Sorunlarını ve Çözüm Önerilerini Analiz Edin\nBu senaryoda, ortaya çıkan senkronizasyon sorunlarını analiz ederek uygun çözüm önerilerini belirleyin:\n\n1. **Senkronizasyon Sorunlarını Belirleyin 🛠️:** Simülasyon sırasında meydana gelen kilitlenme veya açlık gibi sorunları tanımlayın. Felsefecilerin hangi durumlarda bu sorunları yaşadığını gözlemleyin.\n2. **Çözüm Önerilerini Araştırın 📚:** Bu sorunları önlemek için kullanılan farklı çözüm önerilerini araştırın. Örneğin, kilitlenme önleme algoritmaları veya felsefeciler için öncelik düzenlemeleri.\n3. **Uygun Çözümleri Uygulayın 🔧:** Belirlediğiniz çözüm önerilerini simülasyonda uygulayın ve sonucu gözlemleyin. Çözüm önerilerinin senkronizasyon sorunlarını nasıl etkilediğini analiz edin.\n\n\u003c!-- Katkıda Bulunma --\u003e\n## Katkıda Bulunma 🤝\n\u003cp\u003eBu projeye katkıda bulunmak için aşağıdaki adımları takip edin:\u003c/p\u003e\n\u003col\u003e\n  \u003cli\u003e\u003cstrong\u003eFork Yapın 🔄:\u003c/strong\u003e Projeyi kendi GitHub hesabınıza fork yapın ve değişiklikler yapmak için kendi kopyanızı oluşturun.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eDeğişiklikler Yapın 🛠️:\u003c/strong\u003e Kendi ortamınızda geliştirmeler yapın ve değişikliklerinizi test edin.\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003ePull Request Gönderin 📩:\u003c/strong\u003e Değişikliklerinizi göndermek için bir pull request oluşturun ve açıklamalar ekleyin.\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003c!-- Lisans --\u003e\n## Lisans 📜\n\u003cp\u003eBu proje, \u003ca href=\"LICENSE\"\u003eMIT Lisansı\u003c/a\u003e kapsamında lisanslanmıştır. Lisans detaylarını öğrenmek için lütfen lisans dosyasını kontrol edin.\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e2025 This project was created by Derya ACAR.\u003c/p\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyaxacar%2F42-philosophers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderyaxacar%2F42-philosophers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderyaxacar%2F42-philosophers/lists"}