2010-12-10 18 views
16

मेरे आवेदन में मैं डेटा पढ़ने और लिखने के लिए .NET SerialPort क्लास का उपयोग करता हूं। रीडिंग डेटा रिसीव इवेंट का उपयोग करके किया जाता है, मैं आंतरिक रूप से थ्रेडपूल थ्रेड पर मानता हूं। लेखन यूआई थ्रेड (WinForms) द्वारा किया जाता है।क्या .NET SerialPort लिखना/पढ़ना सिंक्रनाइज़ करना आवश्यक है?

मैं सोच रहा था, यदि सीरियलपोर्ट उदाहरण तक पहुंच को सिंक्रनाइज़ करना आवश्यक है, तो एक ही समय में कोई रीड/राइट नहीं हो सकता है। मेरा विवेक मुझे बताता है कि मुझे इन कॉलों के चारों ओर ताले लगाएंगे, लेकिन मुझे परेशान है क्योंकि इंटरनेट पर मिलने वाले सभी सी # सीरियलपोर्ट उदाहरणों में लॉकिंग का उपयोग नहीं किया जाता है।

+2

आपको निश्चित रूप से लॉक करना चाहिए। सबसे अधिक संभावना है कि इंटरनेट पर आपको जो उदाहरण मिलते हैं वे अधिक हैं। मैं इसे किसी भी उदाहरण के लिए दस्तावेज़ीकरण को ध्यान से पढ़ने का नियम बनाने का प्रयास करता हूं, जिसे मैं अनुवर्ती करने का प्रयास कर रहा हूं, बस इस तरह की स्थिति को छोड़ दिया गया है। –

उत्तर

9

यहाँ, विषय पर एक महान धागा है serialport वर्ग के लेखक भाग लेने के साथ:

MSDN: How does SerialPort handle DataReceived?

मेरे अनुभव से, मैं हार्डवेयर सिम्युलेटरों के रूप में उपयोग के लिए एक दर्जन से अधिक धारावाहिक संचार एप्लिकेशन लिखा है, मैं लॉक मत करो। मुझे उस समय पता नहीं था कि मैं सुरक्षित था या नहीं, लेकिन व्यवहार में, मुझे अभी तक कोई त्रुटि नहीं मिली है। (20+ परीक्षकों और स्वचालित परीक्षण मशीनों के निरंतर उपयोग के एक वर्ष) ने कहा, मेरे आवेदन कंपनी को नहीं छोड़ते हैं, अगर मैं सार्वजनिक खपत के लिए ऐप्स लिख रहा था तो मैं अधिक ध्यान दे सकता हूं।

+1

उत्कृष्ट और सूचनात्मक लिंक के लिए धन्यवाद-यह एक अच्छा खोज है। लेकिन मुझे लगता है कि किसी को सावधानी बरतनी चाहिए कि इस तरह के कार्यान्वयन विवरणों पर बहुत अधिक भरोसा न करें, जब मूल प्रश्न जैसे डिजाइन निर्णय लेते हैं। यह जानना दिलचस्प और अच्छा है कि चीजें हुड के नीचे कैसे काम करती हैं, लेकिन इसे आधिकारिक रूप से दस्तावेज नहीं दिया गया है, इस बात की कोई गारंटी नहीं है कि यह इस तरह रहेगा। प्रलेखन (और सर्वोत्तम अभ्यास) अनुशंसा करता है कि आप लॉक करें, इसलिए ऐसा करने के लिए मैं ऐसा करना चाहता हूं जब तक ऐसा करने के लिए कोई विशेष * हानिकारक * न हो। –

+0

वाह, वह लिंक निश्चित रूप से कुछ प्रश्नों का उत्तर देता है! मैं ताले के साथ जाऊंगा, क्योंकि मुझे अपनी कक्षा में एक ही सदस्य संदर्भ का उपयोग करके धारावाहिक बंदरगाह को बंद करने और पुनः कनेक्ट करने जैसे परिदृश्यों को संभालना होगा, इसलिए उन चीजों को भी सिंक्रनाइज़ करना होगा – Mike

2

प्रलेखन से:

किसी भी सार्वजनिक स्थिर इस प्रकार (serialport) के सदस्यों (विजुअल बेसिक में साझा) धागा सुरक्षित हैं। किसी भी इंस्टेंस सदस्यों को थ्रेड सुरक्षित होने की गारंटी नहीं है।

तो आप निश्चित रूप से अपने पढ़ने सिंक्रनाइज़ चाहिए/ताले के साथ लिखता है।

+1

हां, मुझे यह शब्द पता है, इसलिए मैं उन कॉलों को पहली जगह सिंक्रनाइज़ करने जा रहा था। – Mike

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