मैं अपने खुद के खेल में एक समान आपूर्ति प्रणाली विकसित कर रहा हूं, इसलिए मैं यह भी सोच रहा हूं कि आपूर्ति-लॉक मुद्दे और पक्षपात को कैसे हल किया जाए। समस्या का वर्णन करने के लिए, मैं एक सरल उदाहरण बनाऊंगा:
यदि आपके पास एक सूची है: [निर्माता 1, कंज्यूमर 1, कंज्यूमर 2, कंज्यूमर 3] और आप ऑर्डर में अपडेट करते हैं, तो सप्लाई = 0 से शुरू करें, आपको यह मिलेगा:
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer1 wants 3 mass. Success, you now have 4 mass
consumer2 wants 3 mass. Success, you now have 1 mass
consumer3 wants 3 mass. Fail
etc...
Consumer1 को सभी मज़ेदार मिलते हैं, जबकि उपभोक्ता 2 और 3 तब तक भूखे रहते हैं जब तक कि उपभोक्ता 1 संतुष्ट नहीं हो जाता। आपके खेल के आधार पर, यह वांछनीय नहीं हो सकता है। मुझे अपने खेल में पता है, यह नहीं है। जब मैं इसके चारों ओर हो जाता हूं, तो मैं एक कतार बनाने जा रहा हूं, जहां एक टिक में फीड किए गए उपभोक्ता अगले टिक के लिए कतार के पीछे चले जाएंगे, जो मुझे विश्वास है कि रॉय टी। ऊपर का उदाहरण इस तरह दिखेगा:
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass. <-- Move to end of queue
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer2 wants 3 mass. Success, you now have 4 mass <-- Note the order change
consumer3 wants 3 mass. Success, you now have 1 mass
consumer1 wants 3 mass. Fail
etc...
इस तरह, सभी को संसाधनों का उचित हिस्सा मिलेगा।
मैं एक अतिरिक्त कतार को प्राथमिकता कतार के रूप में लागू करने की योजना भी बनाता हूं ताकि उपयोगकर्ता संसाधन प्राथमिकता के लिए कुछ संरचनाओं का चयन कर सके। प्राथमिकता कतार हमेशा मानक कतार से पहले दी जाएगी। सुनिश्चित करें कि सभी उत्पादकों को पहले अपडेट किया गया है, उसके बाद सभी संसाधनों का उपभोग करें, अन्यथा जब आप टिक के माध्यम से संसाधनों का हिस्सा बनाते हैं तो कतार टूट जाएगी और कुछ उपभोक्ता पहले ही भूखे रह चुके हैं।
इसलिए पुनरावर्तन करने के लिए: उत्पादकों को अपडेट करें, फिर प्राथमिकता कतार, आगे बढ़े उपभोक्ताओं को प्राथमिकता कतार के अंत में ले जाएं, फिर मानक कतार को अपडेट करें, खिलाए गए उपभोक्ताओं को मानक कतार के अंत तक ले जाएं।