2008-09-06 10 views
6

मैं सी # में शुरुआत नहीं कर रहा हूं, लेकिन मुझे वास्तव में मेरी समझ में वृद्धि करने की ज़रूरत है, इसलिए मैंने सी # के कुछ और उन्नत अवधारणाओं को सिखाने में मदद के लिए कोड में क्लासिक डेडलॉक समस्या उठाई है। Dining Philosophers Problem एक अच्छा लगता है, लेकिन मुझे शुरू करने के लिए थोड़ी मदद चाहिए। मुझे पता है कि मुझे वस्तुओं के रूप में "डिनर" तक पहुंचने की ज़रूरत है, लेकिन खाने के बीच यादृच्छिक देरी को अनुकरण करने के लिए, क्या मुझे प्रत्येक डाइनर के साथ अलग थ्रेड में थ्रेडिंग देखना चाहिए? क्या मुझे सभी कार्यों की निगरानी करने के लिए किसी प्रकार का "मास्टर" चाहिए? किसी भी सामान्य डिजाइन अवधारणा सलाह का स्वागत है, लेकिन मैं एक अभ्यास के रूप में grunt प्रोग्रामिंग करना चाहता हूँ। धन्यवाद!"डाइनिंग फिलॉसॉफर्स" सिमुलेशन को कोडिंग कैसे शुरू करें?

+0

हम्म ... मैं शायद "डिनर" को धागे के रूप में मॉडल करता हूं ... हालांकि वे धागे लपेटने वाली वस्तुएं हो सकती हैं। – paxos1977

उत्तर

6

मैं सबसे अच्छा तरीका अनुकरण करने के लिए यह use() की तरह एक विधि है कि कांटा (bool available = false) और एक release() है कि यह विज्ञप्ति धारण के साथ एक Fork वर्ग होगा लगता है।

कि पकड़े संचालित/वस्तु कांटा (मुझे लगता है की जारी एक टाइमर एक विधि useFork() ताकि आप वास्तव में गतिरोध अनुभव कर सकते हैं में अच्छा होगा।

और अंतिम एक के लिए getFork(Fork) और releaseFork(Fork) के साथ एक Philosopher वर्ग DinningTable (या किसी अन्य नाम) वर्ग कि उदाहरणों बनाता है, और लॉग करते हैं। आप धागे का उपयोग करना चाहते हैं, तो यहाँ है जहाँ आप Fork के लिए concurring प्रत्येक Philosopher के लिए एक धागा लागू करना चाहिए।

एक सुझाव के रूप में, आप कर सकते थे एक Plate कक्षा लागू करें, स्पेगेटी की मात्रा धारण करना कि समय सीमा के दौरान Philosopher.useFork() विधि कम हो। इस तरह आप देख सकते हैं कि Philosopher पहले खत्म होता है।

मैं आपके लिए कार्यान्वयन करने दूंगा, निश्चित रूप से, क्योंकि आपका उद्देश्य सी # सीखना है ... मेरे अनुभव में, आप बेहतर ढंग से इन वर्गों की तरह कुछ ठोस बनाना सीखते हैं;) इसके अलावा, आप Google पर कई कार्यान्वयन पा सकते हैं यदि आप धोखा देना चाहते हैं ...

मैं आपको इसके बाद कोड साझा करने के लिए आमंत्रित करता हूं। यह एक महान अध्ययन संदर्भ है।

आशा है कि यह आपकी मदद करे।

संबंधित मुद्दे