मल्टी थ्रेडिंग में लॉकिंग के लिए निजी स्टेटिक रीडऑनली ऑब्जेक्ट का उपयोग करना बहुत आम है। मैं समझता हूं कि निजी एनकैप्सुलेशन को कसने से लॉकिंग ऑब्जेक्ट में प्रवेश के बिंदुओं को कम कर देता है और इसलिए सबसे आवश्यक है।
लेकिन स्थिर क्यों?
private static readonly object Locker = new object();
अंत में फ़ील्ड केवल मेरी कक्षा के भीतर ही उपयोग की जाती है, और मैं इसके बजाय केवल इसका उपयोग कर सकता हूं:
private readonly object Locker = new object();
कोई टिप्पणी?
अपडेट करें:
एक उदाहरण के रूप में मैंने इस कोड (केवल एक उदाहरण) को चिपकाया है। मैं इस पर स्थिर या गैर-स्थिर लॉकर का उपयोग कर सकता था और दोनों ठीक काम करेंगे। नीचे दिए गए जवाब को ध्यान में रखते हुए मुझे अपने लॉकर को इस तरह परिभाषित करना चाहिए? (क्षमा करें, मेरे पास अगले सप्ताह एक साक्षात्कार है और हर विवरण जानने की आवश्यकता है :)
private readonly object Locker = new object();
और यहाँ कोड है:
private int _priceA;
private int _priceB;
private EventWaitHandle[] _waithandle;
private readonly IService _service;
//ctor
public ModuleAViewModel(IService service)
{
_service = service;
_modelA = new ModelA();
_waithandle = new ManualResetEvent[2];
_waithandle[0] = new ManualResetEvent(false);
_waithandle[1] = new ManualResetEvent(false);
LoadDataByThread();
}
private void LoadDataByThread()
{
new Thread(() =>
{
new Thread(() =>
{
lock (Locker)
{
_priceA = _service.GetPriceA();
}
_waithandle[0].Set();
}).Start();
new Thread(() =>
{
lock (Locker)
{
_priceB = _service.GetPriceB();
}
_waithandle[1].Set();
}).Start();
WaitHandle.WaitAll(_waithandle);
PriceA = _priceA;
PriceB = _priceB;
}).Start();
}
धन्यवाद
_service
और _waithandle
स्थित हैं? उदाहरण? स्थिर? अन्य? यही कारण है कि हो सकता है , उदाहरण के लिए, ... एक दूरस्थ सर्वर से जान-बूझकर सिंक्रनाइज़ करने का उपयोग कर सकते हो