मैं सी # में शुरुआत नहीं कर रहा हूं, लेकिन मुझे वास्तव में मेरी समझ में वृद्धि करने की ज़रूरत है, इसलिए मैंने सी # के कुछ और उन्नत अवधारणाओं को सिखाने में मदद के लिए कोड में क्लासिक डेडलॉक समस्या उठाई है। Dining Philosophers Problem एक अच्छा लगता है, लेकिन मुझे शुरू करने के लिए थोड़ी मदद चाहिए। मुझे पता है कि मुझे वस्तुओं के रूप में "डिनर" तक पहुंचने की ज़रूरत है, लेकिन खाने के बीच यादृच्छिक देरी को अनुकरण करने के लिए, क्या मुझे प्रत्येक डाइनर के साथ अलग थ्रेड में थ्रेडिंग देखना चाहिए? क्या मुझे सभी कार्यों की निगरानी करने के लिए किसी प्रकार का "मास्टर" चाहिए? किसी भी सामान्य डिजाइन अवधारणा सलाह का स्वागत है, लेकिन मैं एक अभ्यास के रूप में grunt प्रोग्रामिंग करना चाहता हूँ। धन्यवाद!"डाइनिंग फिलॉसॉफर्स" सिमुलेशन को कोडिंग कैसे शुरू करें?
उत्तर
मैं सबसे अच्छा तरीका अनुकरण करने के लिए यह use()
की तरह एक विधि है कि कांटा (bool available = false
) और एक release()
है कि यह विज्ञप्ति धारण के साथ एक Fork
वर्ग होगा लगता है।
कि पकड़े संचालित/वस्तु कांटा (मुझे लगता है की जारी एक टाइमर एक विधि useFork()
ताकि आप वास्तव में गतिरोध अनुभव कर सकते हैं में अच्छा होगा।
और अंतिम एक के लिए getFork(Fork)
और releaseFork(Fork)
के साथ एक Philosopher
वर्ग DinningTable
(या किसी अन्य नाम) वर्ग कि उदाहरणों बनाता है, और लॉग करते हैं। आप धागे का उपयोग करना चाहते हैं, तो यहाँ है जहाँ आप Fork
के लिए concurring प्रत्येक Philosopher
के लिए एक धागा लागू करना चाहिए।
एक सुझाव के रूप में, आप कर सकते थे एक Plate
कक्षा लागू करें, स्पेगेटी की मात्रा धारण करना कि समय सीमा के दौरान Philosopher.useFork()
विधि कम हो। इस तरह आप देख सकते हैं कि Philosopher
पहले खत्म होता है।
मैं आपके लिए कार्यान्वयन करने दूंगा, निश्चित रूप से, क्योंकि आपका उद्देश्य सी # सीखना है ... मेरे अनुभव में, आप बेहतर ढंग से इन वर्गों की तरह कुछ ठोस बनाना सीखते हैं;) इसके अलावा, आप Google पर कई कार्यान्वयन पा सकते हैं यदि आप धोखा देना चाहते हैं ...
मैं आपको इसके बाद कोड साझा करने के लिए आमंत्रित करता हूं। यह एक महान अध्ययन संदर्भ है।
आशा है कि यह आपकी मदद करे।
- 1. एरलांग - डाइनिंग फिलॉसॉफर्स त्रुटियां
- 2. डाइनिंग फिलॉसॉफर्स के साथ जावा में सेमफोर समस्याएं
- 3. "डाइनिंग फिलॉसॉफर्स" के लिए निम्नलिखित समाधान में क्या गलत है?
- 4. भौतिकी सिमुलेशन शुरू करना
- 5. लिनक्स कर्नेल प्रोग्रामिंग, कोडिंग या रीडिंग सीखना कैसे शुरू करें?
- 6. पुरानी कोडिंग शैली php स्क्रिप्ट को कैसे ठीक करें
- 7. हार्डवेयर सिमुलेशन
- 8. गुरुत्वाकर्षण सिमुलेशन
- 9. लैन सिमुलेशन?
- 10. सिमुलेशन के लिए अक्का
- 11. डीबगिंग कैसे शुरू करें?
- 12. संरचना कैसे शुरू करें?
- 13. कोडिंग
- 14. फैक्ट्री फ्लोर सिमुलेशन
- 15. तंत्रिका नेटवर्क प्रोग्रामिंग कैसे शुरू करें
- 16. क्लोजर में अपरिवर्तनीय डेटा के साथ संख्यात्मक सिमुलेशन कैसे करें?
- 17. जीपीयू-त्वरित हार्डवेयर सिमुलेशन?
- 18. आईओएस में जीपीएस सिमुलेशन
- 19. हार्ड कोडिंग बनाम जेनेरिक कोडिंग: रेखा को कहां खींचना है?
- 20. चीनी कोडिंग कैसे हैं?
- 21. एक्सेसिबिलिटी सेवा कैसे शुरू करें?
- 22. प्रोटोकॉल सिमुलेशन के लिए उपकरण
- 23. जावा में रोबोट सिमुलेशन
- 24. आईफोन तरल सिमुलेशन
- 25. मोंगोडब खोल कैसे शुरू करें?
- 26. कोडिंग शैली: कैसे एक कंपनी
- 27. मुझे भौतिकी के सिमुलेशन को कैसे प्रोग्राम करना चाहिए?
- 28. सीखना कैसे शुरू करें SharePoint
- 29. अजाक्स सीखना कैसे शुरू करें?
- 30. रोबोट सिमुलेशन वातावरण
हम्म ... मैं शायद "डिनर" को धागे के रूप में मॉडल करता हूं ... हालांकि वे धागे लपेटने वाली वस्तुएं हो सकती हैं। – paxos1977