ive दिया अपने आप पूछ: "मैं क्यों केवल एक बयान के लॉक का उपयोग करना चाहिए" ...केवल 1 ऑपरेशन लॉकिंग?
(IMHO - अगर इसकी 1 ऑपरेशन केवल एक काम की तरह - तो कोई समस्या नहीं होना चाहिए ..)?
तो मैं इस देखा:
एक बुनियादी नियम के रूप में, आप तक पहुँचने के लिए किसी भी लिखने योग्य क्षेत्र साझा चारों ओर लॉक करने के लिए की जरूरत है। यहां तक कि सबसे सरल मामले में- एक फ़ील्ड पर असाइनमेंट ऑपरेशन-आपको सिंक्रनाइज़ेशन पर विचार करना चाहिए।
class ThreadUnsafe
{
static int _x;
static void Increment() { _x++; }
static void Assign() { _x = 123; }
}
क्या आप मुझे बता क्यों यह सुरक्षित थ्रेड नहीं है कर सकते हैं: निम्नलिखित वर्ग, न बढ़ते क्रम में है और न ही असाइन विधि में धागे की सुरक्षित है? आईव मेरे सिर में कई स्क्रिप्ट चला रहा है और कोई समस्या नहीं मिल सका ...
"एक ऑपरेशन" आमतौर पर "कुछ आपरेशनों" है। अपने कोड की असेंबली देखने के लिए डिबगिंग करते समय डिस्सेप्टर्स को देखें और जांचें कि यह वास्तव में एक ऑपरेशन है या नहीं। यदि ऐसा है - आपको स्पष्ट रूप से लॉक करने की आवश्यकता नहीं है। हालांकि मुझे नहीं लगता कि आपको कभी भी एक ऑपरेशन को लॉक करने की आवश्यकता क्यों होगी, तार्किक रूप से। – SimpleVar
'वृद्धि' असुरक्षित (3 ऑपरेशंस) है। 'असाइन करें' असुरक्षित भी है (1 परमाणु ऑपरेशन लेकिन आपको कैश के माध्यम से मेमोरी सिंक्रनाइज़ेशन का ख्याल रखना होगा)। –
@Soohjun वृद्धि एक परमाणु आपरेशन (आईएनसी DWORD ptr [ईबीपी-3CH]) है – SimpleVar