मैं क्लाइंट सर्वर एप्लिकेशन पर काम कर रहा हूं। कुछ समय पर, कुछ मशीनों पर, जब डेटा से अनुरोध करने वाले 5 से अधिक ग्राहक हैं, तो ऐसा लगता है कि यह एक डेडलॉक तक पहुंच गया है। यदि मैं समस्या को डीबग करने के लिए कदम उठाता हूं, तो प्रोग्राम प्रसंस्करण प्रतीत होता है। बस एक ब्रेक पॉइंट सेट करना जहां मुझे पता है कि प्रोग्राम निष्पादित हो रहा है, और ब्रेकपॉइंट को मारने के कारण इसे कुछ बार समाप्त करना पड़ता है। अगर मैं कोड में कुछ बिंदुओं पर थ्रेड स्लीप (0) डालता हूं, ज्यादातर सीपीयू गहन लूप के आसपास, ऐसा लगता है कि यह समस्या को पूरी तरह से हल करता है। मेरे पास अब एक समस्या यह है कि अगर मैं थ्रेड कहता हूं। नींद (0) बहुत अधिक है, तो यह कोड को धीमा कर सकता है। अगर मैं इसे पर्याप्त नहीं कहता, तो कोड डेडलॉक में प्रतीत होता है। हालांकि मैं यह सत्यापित कर सकता हूं कि यह डेडलॉक में नहीं है क्योंकि यदि मैं कोड में कदम रखता हूं, तो यह समस्या गायब हो जाती है, क्योंकि बस मैं धागे को रोक रहा हूं।थ्रेड क्यों करता है। नींद (0) मेरी समस्याओं को ठीक करें, और इससे कैसे बचें?
क्या इसका कारण यह पता लगाने का एक अच्छा तरीका है कि इसका क्या कारण है। ऐसा लगता है कि यह केवल मेरे लैपटॉप पर होता है जो Vista चला रहा है, लेकिन मेरे डेस्कटॉप पर नहीं जो Windows XP चला रहा है। हालांकि, डीबग करना असंभव है, क्योंकि कोड में बस कदम उठाने से समस्या दूर हो जाती है। मैंने टिप्पणियां पढ़ी हैं जो थ्रेड को बुला रही हैं। नींद (0) एक बुरी प्रथा है, और यह जरूरी नहीं है, और मुझे अपने अनुप्रयोगों में जादूगर प्रकार कोड डालना पसंद नहीं है जो मुझे समझ में नहीं आता कि उसे वहां क्यों होना है । किसी भी प्वाइंटर की अत्यधिक सराहना की जाएगी।
[संपादित करें] मैं यह भी सत्यापित कर सकता हूं कि कोड "डेडलॉक" होने पर भी चल रहा है क्योंकि अगर मैं इसे काफी देर तक छोड़ देता हूं, तो यह खत्म हो जाएगा, केवल उतना ही समय जितना अधिक होता है, उतना ही अधिक मात्रा में होता है। मेरा मतलब है कि यह वास्तव में कम से कम 100 गुना धीमा है जब यह इस "deadlocked" मोड में है। सीपीयू 80-95% पर आंका गया है, इसलिए यह काम कर रहा है, जो कुछ भी कर रहा है वह मेरे बाहर है, क्योंकि यह कार्य को पूरा करने के लिए हमेशा के लिए ले रहा है।
[अधिक जानकारी] सिर्फ इसलिए कि यहां सब लोग आग्रह करते हैं कि यह एक डेडलॉक है, मैंने सभी कोड हटा दिए जो किसी भी लॉकिंग करते थे। कोड की केवल दो पंक्तियां थीं जो किसी भी लॉकिंग को करती थीं। धागे अधिकांश भाग के लिए पूरी तरह से स्वतंत्र रूप से काम करते हैं, इसलिए लॉकिंग को पूरी तरह हटाने के लिए यह बहुत अधिक काम नहीं था। फिर भी समस्या बनी रहती है। मेरे कोड में कोई और सिंकलॉक्स नहीं है, और कोई म्यूटेक्स की कोई और चीज नहीं है जो मुझे दिखाई देती है जो एक डेडलॉक का कारण बनती है, लेकिन समस्या अभी भी वहां है। और यह deadlocked नहीं है। यह बहुत धीमी गति से यद्यपि चलता है, भले ही यह सभी प्रोसेसर संसाधनों को खा रहा हो।
क्या आप कोड पोस्ट कर सकते हैं? – Shawn
क्षमा करें, पोस्ट करने के लिए बहुत सारे कोड, और ऐसा कुछ ऐसा प्रतीत नहीं होता है जिसे मैं केवल थोड़ी सी कोड के साथ पुनः बना सकता हूं। – Kibbee
क्या वह मशीन है जो मल्टी-सीपीयू समस्या को प्रदर्शित करती है और वह एक जो एकल सीपीयू नहीं करता है? यह कई बहु थ्रेड संसाधन विवाद मुद्दों का पर्दाफाश कर सकता है। – zdan