2012-06-28 13 views
6

क्लोजर (और अन्य लिस्प बोलीभाषाओं) के साथ आप चल रहे कोड को संशोधित कर सकते हैं। तो, जब रनटाइम के दौरान कोई फ़ंक्शन संशोधित किया जाता है तो यह परिवर्तन एकाधिक धागे में उपलब्ध कराया जाता है? क्या होता है जब मैं फिर से परिभाषित समारोह foo (defn का उपयोग कर कहते हैं), कई धागे एक समारोह foo उपयोग कर रहे हैं:रन-टाइम पर फ़ंक्शंस को कैसे संशोधित किया जाता है, फिर कई धागे तक प्रचारित किया जाता है?

मैं यह पता लगाने की कि यह कैसे एक समवर्ती की स्थापना में तकनीकी रूप से काम करता है कोशिश कर रहा हूँ?

कुछ सिंक्रनाइज़ेशन चल रहा है: कब और कैसे सिंक्रनाइज़ेशन होता है और इसका क्या खर्चा होता है?

एक जेवीएम पर कहें, क्या volatile संदर्भ का उपयोग कर संदर्भित फ़ंक्शन है? यदि हां, तो क्या इसका मतलब यह है कि हर बार "फंक्शन लुकअप" होता है तो किसी को volatile लागत का भुगतान करना पड़ता है?

उत्तर

8

क्लोजर फ़ंक्शंस में IFn वर्ग और are almost always stored in vars के उदाहरण हैं। vars थ्रेड स्थानीय मान के लिए क्लोजर तंत्र हैं।

  • जब आप एक समारोह है कि "रूट बाइंडिंग" वर के समारोह
  • धागे संदर्भ के लिए अन्य थ्रेड मिल जो कुछ भी जड़ वर के लिए बाध्यकारी के वर्तमान मूल्य लेकिन नहीं बदल सकते सेट को परिभाषित मूल्य। यह किसी भी दो धागे को var के मान से लड़ने से रोकता है क्योंकि केवल रूट थ्रेड मान सेट कर सकता है।
  • धागे यदि वे चाहते हैं तो var के नए मान का उपयोग करना चुन सकते हैं, लेकिन binding पर कॉल करना जो उसके थ्रेड स्थानीय मान देता है कि वे इच्छानुसार बदल सकते हैं क्योंकि कोई अन्य धागा इसे पढ़ नहीं सकता है।

युद्धों की अच्छी समझ एक छोटे से अध्ययन के लायक है, एक बार जब आप उन्हें उपयोग करते हैं तो वे एक बहुत ही उपयोगी सहमति उपकरण हैं।

ps: रूट थ्रेड आमतौर पर आरईपीएल पीएसएस है: यदि आप उदाहरण के लिए कार्यों के समूह को परमाणु रूप से अद्यतन करने की आवश्यकता है, तो यह दुर्लभ है, हालांकि यह दुर्लभ है।

+0

+1 और क्लोजर (और अन्य विषयों;) के संबंध में हमेशा इतना उपयोगी होने के लिए धन्यवाद; क्या आपका पहला बिंदु एक वाक्य है या जहां पहले दो बिंदुओं को एक अनुच्छेद में एक साथ विलय किया जाना चाहिए? मुझे लगता है कि आप कुछ अलग लिखना चाहते थे:) –

+0

मैं इसे सब कुछ सीखने की योजना बना रहा हूं, लेकिन सड़क थोड़ी लंबी है;) –

+0

@cedric मार्टिन, मैं व्याकरण मशीन हालांकि एक और पास दे दूंगा ... ;-) –

संबंधित मुद्दे