मुझे स्थिति चर के उपयोग से संबंधित मेरे कोड में डेडलॉक के साथ समस्या है। शुद्ध कोड प्रश्न की तुलना में यह एक डिजाइन सवाल है। सही डिजाइन को समझने के बाद मुझे वास्तव में कोड लिखने में कोई समस्या नहीं है। मेरे पास निम्नलिखित परिदृश्य है:कंडीशन वैरिएबल डेडलॉक
- थ्रेड ए एक शर्त चर पर प्रतीक्षा करता है।
- थ्रेड बी notify_all कॉल करता है, और थ्रेड ए जागता है।
यह निश्चित रूप से मैं क्या करना चाहता हूं, और यह तब होता है जब सब कुछ अपेक्षित काम करता है। लेकिन कभी-कभी, मुझे इसके बजाय निम्न परिदृश्य मिलता है:
- थ्रेड ए कंडीशन चर पर प्रतीक्षा करने से पहले कोड को सही तरीके से निष्पादित करता है।
- थ्रेड बी कॉल notify_all, सोच रहा है कि थ्रेड ए इंतजार कर रहा है।
- थ्रेड ए कंडीशन वैरिएबल पर इंतजार करना शुरू कर देता है, यह नहीं समझते कि थ्रेड बी ने पहले से ही इंतजार करना बंद कर दिया है। गतिरोध।
इसे हल करने का सबसे अच्छा तरीका क्या है? मैं यह देखने के लिए एक विश्वसनीय तरीका नहीं सोच सकता कि क्या थ्रेड ए वास्तव में प्रतीक्षा कर रहा है, यह जानने के लिए कि मुझे थ्रेड बी में notify_all कब कॉल करना चाहिए। क्या मुझे timed_lock का सहारा लेना है? मैं नफरत करता हूँ।
आप किस लाइब्रेरी का उपयोग कर रहे हैं? क्या ओएस? –
एक सेमफोर का प्रयोग करें। –