OpenGL रेंडर पर आधारित गेम के संदर्भ में बात करना:
मान लेते हैं कि दो सूत्र हैं:
खेल की वस्तुओं के लिए खेल तर्क और भौतिकी आदि को अद्यतन करता है
गेम ऑब्जेक्ट्स में डेटा के आधार पर प्रत्येक गेम ऑब्जेक्ट के लिए ओपनल ड्रॉ कॉल करता है (वह थ्रेड 1 अपडेट करता रहता है)
जब तक आपके पास खेल की वर्तमान स्थिति में प्रत्येक गेम ऑब्जेक्ट की दो प्रतियां हैं, तो आपको थ्रेड 1 को रोकना होगा जबकि थ्रेड 2 ड्रॉ कॉल करता है अन्यथा गेम ऑब्जेक्ट उस ऑब्जेक्ट के लिए ड्रॉ कॉल के बीच में अपडेट हो जाएगा, जो अवांछनीय है!
लेकिन थ्रेड 2 से सुरक्षित रूप से ड्रॉ कॉल करने के लिए थ्रेड 1 को रोकना मल्टीथ्रेडिंग / कंसीडर के पूरे उद्देश्य को मारता है
क्या सैकड़ों या हजारों या सिंक ऑब्जेक्ट्स / बाड़ का उपयोग करने के अलावा इसके लिए एक बेहतर दृष्टिकोण है ताकि प्रदर्शन के लिए मल्टीकोर वास्तुकला का फायदा उठाया जा सके?
मुझे पता है कि मैं अभी भी उन वस्तुओं के लिए बनावट और संकलन शेड के लिए मल्टीथ्रेडिंग का उपयोग कर सकता हूं जो वर्तमान गेम स्थिति का हिस्सा होना बाकी है, लेकिन मैं ड्रॉ और अपडेट के साथ संघर्ष किए बिना सक्रिय / दृश्यमान वस्तुओं के लिए कैसे करूं?
क्या होगा अगर मैं गेम ऑब्जेक्ट में से प्रत्येक में अलग सिंक लॉक का उपयोग करता हूं? इस तरह से कोई भी धागा पूरे अद्यतन / ड्रा चक्र के बजाय केवल एक ऑब्जेक्ट (आदर्श मामले) पर ब्लॉक करेगा! लेकिन प्रत्येक वस्तु पर कितना महंगा ताले लग रहे हैं (खेल में एक हजार वस्तुएं हो सकती हैं)?