मुझे पता है कि इससे पहले पूछा गया है (और मैं शोध रखता हूं), लेकिन मुझे यह जानने की जरूरत है कि किसी विशेष लिंक किए गए सूची को थ्रेड सुरक्षित तरीके से कैसे कार्य करना है। मेरा वर्तमान मुद्दा यह है कि मेरे पास एक धागा है जो एक लिंक की गई सूची में सभी तत्वों के माध्यम से लूप करता है, और दूसरा इस सूची के अंत में और तत्व जोड़ सकता है। कभी-कभी ऐसा होता है कि एक थ्रेड सूची में एक और तत्व जोड़ने की कोशिश करता है, जबकि पहले इसके माध्यम से व्यस्त होता है (जो अपवाद का कारण बनता है)।एक लिंक्ड सूची थ्रेड सुरक्षित बनाएं
मैं केवल एक चर (बूलियन ध्वज) जोड़ने के बारे में सोच रहा था कि सूची वर्तमान में व्यस्त हो रही है, लेकिन फिर मैं इसे कैसे देखूं और दूसरे धागे के साथ प्रतीक्षा करें (यह ठीक है अगर यह इंतजार कर रहा है पहला धागा बहुत तेज़ी से चलता है)। ऐसा करने का एकमात्र तरीका यह है कि मैं इस व्यस्त ध्वज को लगातार देखकर थोड़ी देर के लूप के उपयोग के माध्यम से सोच सकता हूं। मुझे एहसास हुआ कि यह एक बहुत ही मूर्ख विचार था क्योंकि इससे कुछ भी उपयोगी नहीं होने पर सीपीयू कड़ी मेहनत कर सकता है। और अब मैं बेहतर अंतर्दृष्टि मांगने के लिए यहां हूं। मैंने ताले के बारे में पढ़ा है और इसी तरह, लेकिन यह मेरे मामले में प्रासंगिक प्रतीत नहीं होता है, लेकिन शायद मैं गलत हूं?
इस बीच में मैं इंटरनेट खोजना जारी रखूंगा और अगर मुझे समाधान मिल जाए तो वापस पोस्ट करें।
संपादित करें: मुझे बताएं कि मुझे चीजों को साफ़ करने के लिए कुछ कोड पोस्ट करना चाहिए, लेकिन मैं इसे और अधिक स्पष्ट रूप से समझाऊंगा।
तो मेरे पास एक लिंक्ड सूची वाला एक वर्ग है जिसमें ऐसे तत्व शामिल हैं जिन्हें प्रोसेसिंग की आवश्यकता होती है। मेरे पास एक थ्रेड है जो फ़ंक्शन कॉल के माध्यम से इस सूची के माध्यम से पुनरावृत्त करता है (चलिए इसे "प्रक्रिया एलीमेंट्स" कहते हैं)। मेरे पास दूसरा धागा है जो तत्वों को गैर-निर्धारिक तरीके से संसाधित करने के लिए जोड़ता है। हालांकि, कभी-कभी ऐसा होता है कि प्रक्रिया एलीमेंट चल रहा है, जबकि यह addElement फ़ंक्शन को कॉल करने का प्रयास करता है। इसका मतलब है कि एक तत्व को लिंक्ड सूची में जोड़ा जा रहा है, जबकि इसे पहले थ्रेड के माध्यम से पुनरावृत्त किया जा रहा है। यह संभव नहीं है और अपवाद का कारण बनता है। उम्मीद है कि यह इसे साफ़ करता है।
मुझे उस थ्रेड की आवश्यकता है जो प्रक्रिया के तब तक उपज करने के लिए नए तत्व जोड़ता है, क्रियाएँ निष्पादन विधि निष्पादित की जाती है।
- किसी को भी इस समस्या पर ठोकर खाने के लिए। स्वीकृत उत्तर आपको एक त्वरित, आसान समाधान देगा, लेकिन अधिक विस्तृत उत्तर के लिए ब्रायन गिडियन का उत्तर नीचे देखें, जो आपको निश्चित रूप से अधिक अंतर्दृष्टि देगा!
आप गलत हैं। ताले * बिल्कुल * आपको क्या चाहिए। –
यह ठीक है (इसलिए "शायद मैं गलत हूं")। धन्यवाद हालांकि, मैं इसे तब तक रखूंगा जब तक कि मुझे यह पता न लगे कि इसे कैसे लागू किया जाए। समाधान – Denzil
प्रदान करने के लिए आपको +1 +1 आपको सूची थ्रेड-सुरक्षित बनाने की आवश्यकता है, न कि 'ए' विधि। और उस से पूछा गया है और कई बार जवाब दिया गया है। –