व्यवहार स्मृति से नहीं बल्कि ताले से लेन-देन का उपयोग कर प्रक्रियाओं है कि समानांतर में निष्पादित सिंक्रनाइज़ करने के लिए और साझा स्मृति की अवधारणा है।
एक बहुत ही सरल स्तर पर, ताले के साथ सिंक्रनाइज़ करने के लिए आप कोड के अनुभागों की पहचान है कि विभिन्न धागे से एक साथ निष्पादित नहीं किया जाना चाहिए और अधिग्रहण और महत्वपूर्ण वर्गों के आसपास ताले जारी (महत्वपूर्ण वर्गों कहा जाता है)। चूंकि प्रत्येक लॉक केवल एक थ्रेड द्वारा एक समय में आयोजित किया जा सकता है, यह गारंटी देता है कि एक बार एक धागा एक महत्वपूर्ण खंड में प्रवेश करता है, तो सभी अनुभागों के संचालन एक ही थ्रेड से पहले एक ही थ्रेड द्वारा सुरक्षित एक महत्वपूर्ण खंड में प्रवेश करने से पहले पूरा हो जाएगा।
लेनदेन संबंधी स्मृति आपको लेनदेन के रूप में कोड के अनुभागों को नामित करने देता है। लेनदेन संबंधी मेमोरी सिस्टम (जिसे हार्डवेयर, सॉफ़्टवेयर या दोनों में कार्यान्वित किया जा सकता है) तो आपको यह गारंटी देने का प्रयास करता है कि किसी भी प्रोग्राम के किसी भी रन जिसमें एकाधिक थ्रेड समानांतर में लेनदेन निष्पादित करते हैं, कार्यक्रम के एक अलग भाग के बराबर होगा लेनदेन सभी एक दूसरे के बाद निष्पादित, कभी भी एक ही समय में नहीं।
लेनदेन स्मृति प्रणाली लेनदेन को समांतर में निष्पादित करने और लेनदेन चर तक पहुंच की निगरानी करके यह करती है। यदि सिस्टम एक ही चर के लिए दो लेन-देन की पहुंच के बीच एक संघर्ष का पता लगाता है, तो इससे उनमें से एक लेनदेन की शुरुआत में "रोलबैक" निरस्त हो जाएगा और इसे "रोलबैक" कर देगा; यह फिर लेनदेन को स्वचालित रूप से पुनरारंभ करेगा, और सिस्टम की समग्र स्थिति इस तरह होगी कि उसने पहले के रन को कभी शुरू नहीं किया था।
लेनदेन संबंधी स्मृति का एक लक्ष्य आसानी से प्रोग्रामिंग और सुरक्षा है; एक उचित ढंग से कार्यान्वित टीएम सिस्टम जो कि लेनदेन को लागू करने में सक्षम है, सही ढंग से उपयोग किया जाता है की गारंटी देता है कि कार्यक्रम में समानांतरता कीड़े (deadlocks, दौड़ की स्थिति, आदि) नहीं हैं, और केवल यह आवश्यक है कि प्रोग्रामर लेनदेन को निर्दिष्ट करे (और कभी-कभी लेनदेन चर, यदि सिस्टम केवल सभी स्मृति को लेनदेन चर के रूप में नहीं मानता है), बिना किसी ताले की पहचान करने की आवश्यकता के बिना, उन्हें डेडलॉक आदि को रोकने के लिए सही क्रम में प्राप्त करें।"ट्रांससिटन्स का सही ढंग से उपयोग किया जाता है" का तात्पर्य है कि लेनदेन चर के माध्यम से बिना थ्रेड के बीच कोई साझा डेटा नहीं है, लेन-देन को छोड़कर लेनदेन संबंधी डेटा तक पहुंच नहीं है, और लेनदेन के अंदर "गैर-रोलबैक करने योग्य" संचालन नहीं है); सी, जावा, आदि जैसी अनिवार्य भाषाओं के लिए लाइब्रेरी आधारित सॉफ़्टवेयर ट्रांज़ेक्शनल मेमोरी सिस्टम आम तौर पर इन सभी को लागू करने में असमर्थ हैं, जो समांतरता की कुछ चीजों की संभावना को फिर से पेश कर सकते हैं।
लेनदेन संबंधी स्मृति का एक और लक्ष्य समांतरता बढ़ रहा है; यदि आपके पास समांतर संचालन का पूरा समूह है जो कुछ डेटा संरचना तक पहुंचता है, तो इसे लिख सकते हैं लेकिन इनमें से कुछ वास्तव में करते हैं, तो लॉक-आधारित सिंक्रनाइज़ेशन आमतौर पर आवश्यक है कि सभी ऑपरेशन क्रमशः चलने के अवसर से बचें डेटा दूषण। लेनदेन संबंधी स्मृति लगभग सभी परिचालनों को समानांतर में चलाने की अनुमति देगी, केवल समानांतरता खोने पर कुछ प्रक्रिया वास्तव में डेटा संरचना को लिखती है।
अभ्यास में (जब मैंने कुछ साल पहले अपने सम्मान परियोजना की खोज की थी), हार्डवेयर आधारित लेनदेन की याददाश्त वास्तव में बंद नहीं हुई है, और वर्तमान सॉफ्टवेयर लेनदेन मेमोरी सिस्टम के महत्वपूर्ण ओवरहेड हैं। तो सॉफ़्टवेयर ट्रांज़ेक्शनल मेमोरी का लक्ष्य "उचित प्रदर्शन जो उपलब्ध प्रोसेसर के साथ स्केल करता है और कोड के लिए बहुत आसान है", आपको पूर्ण अधिकतम प्रदर्शन देने के बजाय।
हालांकि विभिन्न लेनदेन मेमोरी सिस्टम के बीच बहुत भिन्नता है; मैं यहां काफी अमूर्त और सरलीकृत स्तर पर बोल रहा हूं।
मुझे लगता है कि आप यहां पर overselling कर रहे हैं। टीएम एल्गोरिदम सूक्ष्म हैं, जितना पारंपरिक सिंक्रनाइज़ेशन तकनीकें हैं। और परिणामी बग समान रूप से अचूक हो सकते हैं। किसी भी मामले में आपको आम तौर पर लेनदेन टकराव के लिए फॉलबैक के रूप में एक पारंपरिक पारंपरिक संस्करण की आवश्यकता होती है, इसलिए कोई मुफ्त भोजन नहीं होता है। इन कारणों से एसटीएम काफी हद तक विफल रहा है। हैसवेल में एचटीएम वादा करता है, लेकिन एक प्रोग्रामिंग की आसानी से प्रदर्शन परिप्रेक्ष्य से अधिक। –
** यदि ** एसटीएम प्रणाली मजबूत सुरक्षा गारंटी प्रदान करने का लक्ष्य रखती है ** और ** लागू करने के लिए एक तंत्र है (ए) लेनदेन के रूप में साझा डेटा केवल लेनदेन के भीतर से ही उपयोग किया जाता है (बी) लेनदेन के दुष्प्रभाव कभी नहीं होते हैं, फिर एसटीएम कार्यक्रमों को दौड़ की स्थिति और डेडलॉक्स से मुक्त होने की गारंटी है। एसटीएम कार्यान्वयन पर काम करने के बाद, यह सच है। ऐसी एसटीएम प्रणाली का खराब उपयोग आपको विवाद के कारण अबाध प्रदर्शन दे सकता है, लेकिन यह आपको डेडलॉक्स या रेस की स्थिति नहीं दे सकता है जो केवल सटीक समय की शर्तों के तहत समस्याएं पैदा कर सकता है। – Ben
उन पूर्व शर्त सी के लिए लाइब्रेरी आधारित एसटीएम कार्यान्वयन के बारे में सच नहीं हैं, क्योंकि भाषा एकीकरण के बिना (ए) और (बी) को लागू करने का कोई तरीका नहीं है, और सी के साथ किसी भी तरह से लागू करने के लिए बहुत मुश्किल है। मुझे एचटीएम के बारे में ज्यादा जानकारी नहीं है, लेकिन मेरी समझ यह है कि आपको फिर से सुरक्षा गारंटी देने के लिए भाषा एकीकरण की आवश्यकता होती है, इसलिए सी या असेंबलर से एचटीएम का उपयोग मुफ्त लंच के साथ नहीं आता है, नहीं। – Ben