2011-06-28 12 views
9

मैंने समवर्ती संग्रहों पर एक नज़र डाली लेकिन वे हुड के नीचे सामान्य लॉकिंग का उपयोग करने लगते हैं। क्या इस लॉकिंग निर्माण का उपयोग करने वाले नेट फ्रेमवर्क में कोई अच्छा उदाहरण है?क्या नेट फ्रेमवर्क में कोई उदाहरण हैं जो स्पिनलॉक या स्पिनवाइट का उपयोग करते हैं?


मैंने शुरुआत में ConcurrentDictionary को देखा। मैंने देखा कि यह सामान्य ताले का उपयोग कर रहा था लेकिन ब्लॉकिंग कोलेक्शन क्लास स्पिनवाइट का उपयोग अपने आंतरिक तरीकों से करता है।

+0

क्यों आपको लगता है कि क्या करना होगा के बारे में एक परिचयात्मक लेख है? स्पिन लॉक एक व्यस्त प्रतीक्षा तंत्र है, यानी उपयोगी कुछ भी किए बिना संसाधनों का उपयोग –

+0

शुद्ध रूप से शैक्षिक। मुझे नहीं लगता कि मुझे कभी ऐसा करने की ज़रूरत होगी। लेकिन मैं बस इसके बारे में अधिक जानना चाहता हूं और एक सभ्य उदाहरण पर नजर डालना चाहता हूं। अधिकांश उदाहरण काफी अच्छे तरीके से विकसित होते हैं। – uriDium

+0

कि आप वास्तविक जीवन उदाहरण नहीं ढूंढ सकते हैं पहले से ही मेरी राय में बहुत कुछ कहता है। –

उत्तर

4

क्या आप सामान्य ताला लगा द्वारा मतलब है? किसी प्रकार का lock(object) { ... } निर्माण?

यदि हां, तो आपको ConcurrentStack पर ध्यान देना चाहिए, उदाहरण के लिए, यह अपने काम के लिए SpinWait का उपयोग करता है।

4

बहुत कम लो-लॉक समवर्ती संग्रह कक्षा में से कुछ SpinWait और Yield के कुछ संयोजन का उपयोग करेंगे। हालांकि ConcurrentDictionary एक उल्लेखनीय अपवाद है। मुझे मिली कक्षाओं की सूची में निम्नलिखित शामिल हैं।

  • ManualResetEventSlim
  • SemaphoreSlim
  • spinlock
  • बैरियर
  • ReaderWriterLockSlim
  • ConcurrentQueue
  • ConcurrentStack
  • BlockingCollection
2

ConcurrentStack और ConcurrentQueue ताला मुक्त संग्रह, तथापि ConcurrentDictionary, ConcurrentBag ताले का उपयोग कर रहे हैं। अवरुद्ध चयन सिर्फ एक कंटेनर है, इसलिए यह स्वयं संग्रह नहीं है, इसे अन्य थ्रेडसेफ संग्रह लपेटना है, उदाहरण के लिए var bc = new blockingCollection (new ConcurrentStack());

यह कैसे ताला मुक्त कोड में SpinWait उपयोग करने के लिए http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html

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

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