एक अपेक्षाकृत मामूली सवाल है, लेकिन मैं इस पर आधिकारिक प्रलेखन या यहां तक कि ब्लॉग की राय / चर्चा नहीं पा सका हूं।
सीधे शब्दों में कहें: जब मेरे पास एक निजी वस्तु है जिसका एकमात्र उद्देश्य निजी सेवा करना है lock, तो मुझे उस वस्तु का क्या नाम देना चाहिए?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
हमें LockingObjectयहां क्या नाम देना चाहिए ? इसके अलावा न केवल चर के नाम पर विचार करें, लेकिन लॉक करते समय यह इन-कोड कैसे दिखता है।
मैंने विभिन्न उदाहरण देखे हैं, लेकिन सलाह देने के लिए कोई ठोस नहीं है:
SyncRoot(और जैसे विविधताओं_syncRoot) के बहुत सारे उपयोग ।- कोड नमूना:
lock(SyncRoot),lock(_syncRoot) - यह VB के समकक्ष से प्रभावित प्रतीत होता है
SyncLockकथन से , जोSyncRootसंपत्ति कुछ ICollection वर्गों और कुछ प्रकार के SyncRoot डिजाइन पैटर्न का हिस्सा है (जो यकीनन एक बुरा विचार है) पर मौजूद है - C # संदर्भ में होने के नाते, सुनिश्चित नहीं है कि मैं VBish नामकरण करना चाहता / चाहती हूं। इससे भी बदतर, VB में चर का नामकरण खोजशब्द के समान है। निश्चित नहीं है कि यह भ्रम का स्रोत होगा या नहीं।
- कोड नमूना:
thisLockऔरlockThisMSDN लेखों से: C # लॉक स्टेटमेंट , VB SyncLock स्टेटमेंट- कोड नमूना:
lock(thisLock),lock(lockThis) - सुनिश्चित नहीं हैं कि उदाहरण के लिए इनका नाम शुद्ध रूप से रखा गया था या नहीं
- अजीब तरह की अगर हम एक के भीतर इस का उपयोग कर रहे हैं
staticवर्ग / विधि के । - EDIT: ताले पर विकिपीडिया लेख भी इस उदाहरण के लिए नामकरण का उपयोग करता है
- कोड नमूना:
एक
PadLockअलग आवरण के कई उपयोग- कोड नमूना:
lock(PadLock),lock(padlock) - बुरा नहीं है, लेकिन मेरा एकमात्र गोमांस है जो कि अनजाने में एक भौतिक "पैडलॉक" की छवि को आमंत्रित करता है जिसे मैं अमूर्त थ्रेडिंग अवधारणा के साथ नहीं जोड़ता हूं ।
- कोड नमूना:
लॉक का नामकरण उस चीज़ पर आधारित है जिसे लॉक करने का इरादा है
- कोड नमूना:
lock(messagesLock),lock(DictionaryLock),lock(commandQueueLock) - VB SyncRoot MSDN पृष्ठ उदाहरण में, यह एक है
simpleMessageListएक निजीmessagesLockऑब्जेक्ट के साथ एक उदाहरण है - मुझे नहीं लगता कि आप जिस प्रकार ("DictionaryLock") को लॉक कर रहे हैं, उस प्रकार के विरुद्ध लॉक को नाम देना अच्छा है क्योंकि यह एक कार्यान्वयन विवरण है जो बदल सकता है। मैं उस कॉन्सेप्ट / ऑब्जेक्ट का नामकरण पसंद कर रहा हूं, जिसे आप लॉक कर रहे हैं ("मैसेजसॉक" या "कमांडक्यूयू लॉक")
- दिलचस्प है, मैं कोड नमूने में वस्तुओं को ऑनलाइन या StackOverflow पर लॉक करने के लिए इस नामकरण सम्मेलन को बहुत कम देखता हूं ।
- कोड नमूना:
(EDIT) सेक्शन "8.12 द लॉक स्टेटमेंट" के तहत C # कल्पना में इस पैटर्न का एक उदाहरण है और इसे नाम दिया गया है
synchronizationObject- कोड नमूना:
lock(SynchronizationObject),lock(synchronizationObject)
- कोड नमूना:
प्रश्न: आपकी राय क्या है आम तौर पर नामकरण के बारे में निजी लॉकिंग वस्तुओं?
हाल ही में, मैंने उनका नामकरण शुरू किया है ThreadLock(जैसे कि विकल्प 3 की तरह), लेकिन मैं खुद को उस नाम पर सवाल उठा रहा हूं।
मैं अपने अनुप्रयोगों में अक्सर इस लॉकिंग पैटर्न (ऊपर दिए गए कोड नमूने में) का उपयोग कर रहा हूं, इसलिए मैंने सोचा कि उनके लिए एक ठोस नामकरण सम्मेलन के बारे में अधिक पेशेवर राय / चर्चा प्राप्त करने के लिए यह समझ में आ सकता है। धन्यवाद!
SynchronizationContextकुछ काफी अलग है।