मुझे सी # में कक्षाएं बनाने का त्वरित तरीका पसंद है, जहां हम आसानी से सदस्यों को प्राप्त करने और सेट कोड को लागू किए बिना सदस्यों को बना सकते हैं, लेकिन (जहां तक मुझे पता है) वे थ्रेड सुरक्षित नहीं हैं!इस सी # कक्षा धागे को फिर से लिखने के बिना सुरक्षित बनाने का कोई तरीका?
public class SocksEntry
{
public int Int1 { get; set; }
public int Int2 { get; set; }
}
क्या सी # ऐसा करने के बिना थ्रेड सुरक्षा जोड़ने का एक आसान तरीका प्रदान करता है?
public class SocksEntry
{
protected object _lock = new object();
// internal
private int _int1 = 0;
private int _int2 = 0;
// accessors
protected int Int1
{
get { lock (_lock) return _int1; }
set { lock (_lock) _int1 = value; }
}
protected int Int2
{
get { lock (_lock) return _int2; }
set { lock (_lock) _int2 = value; }
}
}
यह स्पष्ट रूप से पूरी कक्षा को गैर-थ्रेड सुरक्षित संस्करण की तुलना में बहुत बड़ा और दर्द बनाने के लिए बनाता है!
शायद इसे देखना चाहें: http://www.codeproject.com/Articles/33559/Handy-wrapper-class-for-thread-safe-property-acces –
संपत्ति में एम्बेडेड ताले के साथ आपका कोड एक्सेसर्स वास्तव में थ्रेड-सुरक्षित नहीं है, या तो। यदि वे विधियों को रेखांकित करते हैं, तो वे एकमात्र चीज आपको याद कर सकते हैं, लेकिन आप जिन परिचालनों को 'लॉकिंग' कर रहे हैं वे वास्तव में पहले से ही परमाणु परिचालन हैं। यह केवल उच्च स्तर के संचालन को लॉक करने के लिए समझ में आता है जिसमें कई राज्यों के समन्वय शामिल होते हैं। –