चूंकि मैं खुद कुछ उलझन में था, इसलिए मैं प्रश्न में कुछ अवधारणाओं को स्पष्ट करके शुरू करता हूं।
संग्रह । मैं समय को कठोरता से परिभाषित करने का कोई कारण नहीं देखता हूं कि "संग्रह" का क्या मतलब है जब हम बस पूछ सकते हैं कि सामान्य रूप से डेटा संरचनाओं के लिए क्या होता है। एक डेटा संरचना स्मृति के एक हिस्से पर कब्जा कर लेती है और इसमें कुछ ऑपरेशन होते हैं जो उस मेमोरी तक पहुंच सकते हैं और जो उपयोगकर्ताओं द्वारा लागू किए जा सकते हैं । ये उपयोगकर्ता अलग-अलग प्रोसेसर या बस अलग-अलग धागे हो सकते हैं, यह हमें चिंता नहीं करता है। यह सब मायने रखता है कि वे समानांतर में संचालन को अंजाम दे सकते हैं।
ताला-मुक्त । हर्लिही और बॉस का कहना है कि जब कोई दुर्घटनाग्रस्त उपयोगकर्ता डेटा संरचना के आगे उपयोग को नहीं रोकता है, तो डेटा संरचना लॉक-फ्री होती है। उदाहरण के लिए, कल्पना कीजिए कि एक प्रोसेसर पर पानी डाला जाता है जो एक सॉर्ट किए गए सेट में एक नोड डालने के बीच में है। ठीक है, अगर अन्य प्रोसेसर बाद में उस सॉर्ट किए गए सेट में डालने की कोशिश करते हैं, तो उन्हें सफल होना चाहिए। ( संपादित करें: इस परिभाषा के अनुसार, यह मामला है कि यदि कोई डेटा संरचना ताले का उपयोग करती है तो यह लॉक-फ़्री नहीं है, लेकिन यह मामला नहीं है कि यदि कोई डेटा संरचना लॉक का उपयोग नहीं करती है तो वह लॉक-फ़्री है।)
इन परिभाषाओं के साथ, मुझे लगता है कि हर्लीह और बॉस मूल रूप से कहते हैं कि जवाब महत्वपूर्ण क्षेत्रों को लेनदेन में बदलना है।
लेकिन, आप पूछ सकते हैं कि क्या इसकी जटिलता समान है? मुझे यकीन नहीं है कि सवाल समझ में आता है। विचार करें push(x) { lock(); stack[size++] = x; unlock(); }
। क्या यह एक निरंतर समय संचालन है? यदि आप लॉकिंग ऑपरेशन और इसलिए अन्य उपयोगकर्ताओं को अनदेखा करते हैं तो आप हां का जवाब दे सकते हैं। यदि आप अन्य उपयोगकर्ताओं को अनदेखा नहीं करना चाहते हैं, तो वास्तव में यह कहने का कोई तरीका नहीं है कि क्या निरंतर समय में पुश चलेगा। यदि आप एक स्तर ऊपर जाते हैं और देखते हैं कि स्टैक का उपयोग कुछ विशेष एल्गोरिथ्म द्वारा कैसे किया जाता है, तो आप यह कहने में सक्षम हो सकते हैं कि पुश हमेशा निरंतर समय लेगा (अब जो कुछ भी आपके समानांतर एल्गोरिदम का इनपुट होगा) के संदर्भ में मापा जाता है। लेकिन वह वास्तव में तो यह मतलब नहीं है यह कहना है कि, अपने एल्गोरिथ्म की संपत्ति है धक्का है एक निरंतर समय ऑपरेशन।
सारांश में, यदि आप अनदेखा करते हैं कि एक ऑपरेशन को अंजाम देने वाला उपयोगकर्ता अन्य उपयोगकर्ताओं के लिए कितना इंतजार करता है, तो महत्वपूर्ण क्षेत्रों के बजाय लेनदेन का उपयोग करना आपके प्रश्न का सकारात्मक जवाब देता है। यदि आप प्रतीक्षा समय को अनदेखा नहीं करते हैं, तो आपको यह देखने की आवश्यकता है कि डेटा संरचना का उपयोग कैसे किया जाता है।