सॉफ्टवेयर ट्रांजेक्शनल मेमोरी की संगतता उदाहरण


11

सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी के प्रमुख लाभों में से एक जो हमेशा उल्लेखित होता है, वह है कंपैटिबिलिटी और मॉड्युलैरिटी। अलग-अलग घटकों का उत्पादन करने के लिए विभिन्न टुकड़ों को जोड़ा जा सकता है। लॉक-आधारित कार्यक्रमों में, यह अक्सर ऐसा नहीं होता है।

मैं एक साधारण उदाहरण की तलाश कर रहा हूं जो वास्तविक कोड के साथ यह दर्शाता है। मैं क्लोजर में एक उदाहरण पसंद करूंगा, लेकिन हास्केल भी ठीक है। बोनस अंक अगर उदाहरण में कुछ लॉक-आधारित कोड भी प्रदर्शित करता है, जिसे आसानी से नहीं बनाया जा सकता है।


1
दिलचस्प है, लेकिन मेरे लिए एक StackOverflow प्रश्न की तरह लगता है।
स्टीव

यह सवाल वहां 4 मिनट बाद पूछा गया है। stackoverflow.com/questions/5518546/… क्या कोई व्यक्ति इस प्रश्न को स्थानांतरित करेगा और मर्ज करेगा (यदि संभव हो)?
नौकरी '

हाँ, जब मैंने इसे यहाँ पोस्ट किया, मुझे एहसास हुआ कि यह शायद Stackoverflow पर बेहतर होगा। अगर कोई इसे मर्ज कर सकता है, तो मेरे साथ ठीक है।
dbyrne

जवाबों:


9

मान लीजिए कि आपके कुछ बैंक खाते हैं:

(def accounts 
 [(ref 0) 
  (ref 10) 
  (ref 20) 
  (ref 30)])

और एक परमाणु "हस्तांतरण" समारोह:

(defn transfer [src-account dest-account amount]
  (dosync
    (alter dest-account + amount)
    (alter src-account - amount)))

जो निम्नानुसार काम करता है:

(transfer (accounts 1) (accounts 0) 5)

(map deref accounts)
=> (5 5 20 30)

आप उच्च स्तरीय लेनदेन बनाने के लिए आसानी से हस्तांतरण समारोह की रचना कर सकते हैं, उदाहरण के लिए कई खातों से स्थानांतरण के लिए:

(defn transfer-from-all [src-accounts dest-account amount]
  (dosync
    (doseq [src src-accounts] 
      (transfer src dest-account amount))))

(transfer-from-all 
  [(accounts 0) (accounts 1) (accounts 2)] 
  (accounts 3) 
  5)

(map deref accounts)
=> (0 0 15 45)

ध्यान दें कि सभी कई हस्तांतरण एक एकल, संयुक्त लेनदेन में हुए, यानी छोटे लेनदेन को "बनाना" संभव था।

ताले के साथ ऐसा करने के लिए बहुत जल्दी जटिल हो जाएगा: व्यक्तिगत रूप से लॉक होने के लिए आवश्यक खातों को संभालने के बाद आपको लॉक अधिग्रहण आदेश पर एक प्रोटोकॉल स्थापित करने की आवश्यकता होगी ताकि गतिरोध से बचा जा सके। एक मुश्किल से पता लगाने की गलती करना बहुत आसान है। एसटीएम आपको इस सभी दर्द से बचाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.