2009-05-19 20 views
6

मैं .NET कार्यान्वयन - System.Data.SQLite के बारे में पूछ रहा हूं। क्या इसे थ्रेड-सुरक्षित तरीके से उपयोग करने के लिए दिशानिर्देश हैं?SQLite.Net थ्रेड-सुरक्षित है?

मुझे पता है कि SQLite को संकलित किया जा सकता है with or without thread safety - लेकिन System.Data.SQLite कैसे संकलित किया गया था?

उत्तर

8

यह थ्रेड-सुरक्षित नहीं है, इसलिए आप कनेक्शन ऑब्जेक्ट्स या थ्रेड के समान समान नहीं साझा कर सकते हैं।

रीडेमे फ़ाइल में उल्लिखित थ्रेड बगफिक्स को एक ही फ़ाइल में एकाधिक कनेक्शन (यानी एक-एक) का उपयोग करके कई धागे के साथ करना है, और किस तरह की समस्याएं या दौड़ की स्थिति उत्पन्न हो सकती है।

उदाहरण के लिए, BEGIN और BEGIN के लिए उल्लिखित थ्रेड रेस हालत में दुर्भाग्यपूर्ण प्रभाव पड़ा था कि भले ही थ्रेड ने एक जारी किया था, फिर भी एक और थ्रेड जो बाद में जारी किया गया था, पहले से पहले डेटाबेस का मालिक बन सकता था। इन प्रकार की स्थितियों को ठीक किया गया है।

लेकिन .NET में डेटाबेस कनेक्शन (ऑरैकल, स्क्लाइट, एमएस एसक्यूएल सर्वर) थ्रेड-सुरक्षित नहीं हैं, न ही आसपास के ऑब्जेक्ट्स हैं।

+3

उपरोक्त में एक छोटी राशि जोड़ने के लिए - ADO.NET spec अनुशंसा नहीं करता है या वे थ्रेड सुरक्षित होने की आवश्यकता नहीं है। आपको प्रति थ्रेड एक कनेक्शन का उपयोग करना चाहिए - यह ADO.NET का डिज़ाइन है। –

+0

पढ़ने के बारे में क्या? क्या धागे में केवल पढ़ने के लिए कनेक्शन साझा करना सुरक्षित है? – axe

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