मैं एक कार्यकर्ता धागा है जो एक MVAr से बार-बार डेटा पढ़ता है और उस पर कुछ उपयोगी काम करता है एक धागा हत्या। थोड़ी देर के बाद, इस कार्यक्रम के बाकी है कि कार्यकर्ता धागा, जिसका अर्थ है कि यह एक खाली MVAr पर प्रतीक्षा करें और बहुत अकेला हो जाएगा के बारे में भूल जाता है। मेरा सवाल है:जब MVAr कचरा एकत्र किया जाता है
क्या एमवीआर कचरा इकट्ठा होगा यदि धागे अब इसे लिखते हैं, उदाहरण के लिए क्योंकि वे सभी इसके लिए प्रतीक्षा करते हैं? विल कचरा संग्रहण इंतजार कर रहे धागे को मारने? हैं न, मैं किसी भी तरह संकलक कि MVAr कचरा एकत्र किया जाना चाहिए और धागे को इंगित कर सकते हैं मारा जा?
संपादित करें: मुझे शायद अपने प्रश्न के उद्देश्य को स्पष्ट करना चाहिए। मैं deadlocks के खिलाफ सामान्य सुरक्षा की इच्छा नहीं है; इसके बजाय, मुझे क्या करना चाहते हैं एक मूल्य के जीवन के लिए कार्यकर्ता धागे के जीवन टाई (: मृत मान कचरा संग्रहण द्वारा दावा कर रहे हैं के रूप में में) है। दूसरे शब्दों में, कार्यकर्ता धागा एक संसाधन है कि मैं हाथ से नहीं मुक्त करना चाहते हैं, लेकिन कचरा एकत्र जब एक निश्चित मूल्य (MVAr या एक व्युत्पन्न) है।
यहाँ एक उदाहरण कार्यक्रम को दर्शाता है कि मेरे मन
import Control.Concurrent
import Control.Concurrent.MVar
main = do
something
-- the thread forked in something can be killed here
-- because the MVar used for communication is no longer in scope
etc
something = do
v <- newEmptyMVar
forkIO $ forever $ work =<< takeMVar v
putMVar v "Haskell"
putMVar v "42"
दूसरे शब्दों में में है, मैं चाहता हूँ धागा मारे जाने जब मैं अब, यानी जब यह साथ संवाद कर सकते करने के लिए संचार के लिए इस्तेमाल किया गया एमवीआर अब गुंजाइश में नहीं है। उसको कैसे करे?
यहां एमवीआर काम के कमजोर संदर्भ का उपयोग कर सकते हैं? –
@ जॉन: वास्तव में, लेकिन क्या होगा अगर थ्रेड उस समय को सीमित करता है जब वह एमवीआर के लिए इंतजार कर रहा है और समय-समय पर जांच करता है कि कमजोर सूचक अभी भी जीवित है या नहीं? (कमजोर सूचक को शायद एक और मूल्य इंगित करना पड़ता है, जो एमवीआर के साथ-साथ गुंजाइश से बाहर निकलता है।) आदर्श रूप से, अवधि कचरा संग्रह की आवृत्ति द्वारा दी जानी चाहिए। –
@HinrichApfelmus: मेरा पहला संपादन मूल रूप से इसे एक तरह से करता है। आपने एक और दृष्टिकोण सुझाया है जो शायद बेहतर है: अवरुद्ध धागे में एसिंक अपवाद बढ़ाने के लिए एक और धागा उत्पन्न करना, पढ़ने में बाधा डालना और इसे कमजोर सूचक से फिर से पढ़ने के लिए मजबूर करना। मैं आज बाद में कुछ कोड काम करने की कोशिश करूंगा। लेकिन फिर भी, यह भाषा के कुख्यात मुश्किल हिस्सों का उपयोग करके, बहुत से काम की तरह लगता है, जो कि डॉन तकनीक के साथ आसानी से सुलझाया जाता है। –