2015-09-21 3 views
5

मेरे पास एक बहु-थ्रेडेड (पॉज़िक्स थ्रेड या पर्थ्रेड आधारित) सी अनुप्रयोग है जो ओरेकल प्रो सी प्रीकंपलर का उपयोग करता है। एप्लिकेशन एक वैश्विक sqlca संरचना का उपयोग करता है। ,ओरेकल डेटाबेस एक्सेस के लिए थ्रेड-सुरक्षित वैश्विक sqlca संरचना

#include <sqlca.h> 

और अन्य सभी, ग फ़ाइलों में इसे इस्तेमाल करता है इस प्रकार है:: एक ग फ़ाइल में, यह के रूप में Oracle डाटाबेस पहुँच के लिए वैश्विक sqlca struct परिभाषा में शामिल

#define SQLCA_STORAGE_CLASS extern 
    #include <sqlca.h> 

मेरा प्रश्न है, तो अधिक है एक थ्रेड से क्वेरी, डालने या अद्यतन करने के लिए डेटाबेस तालिका तक पहुंचने का प्रयास करता है और वैश्विक sqlca ऑब्जेक्ट का उपयोग करता है, मैं आपसी बहिष्करण की गारंटी कैसे देता हूं या इसे थ्रेड-सुरक्षित पहुंच कैसे देता हूं? इसके अलावा, जब मैं बनाम/अद्यतन बनाम क्वेरी करता हूं, तो क्या वे सभी sqlca संरचना का उपयोग करते हैं?

उत्तर

1

आपके पास एक वैश्विक कार्य हो सकता है जो एक म्यूटेक्स ऑब्जेक्ट पकड़ लेता है, और एक वैश्विक फ़ंक्शन जो म्यूटेक्स ऑब्जेक्ट देता है।

डेटाबेस का उपयोग करने की आवश्यकता वाले थ्रेड को म्यूटेक्स को पकड़ने वाले फ़ंक्शन को कॉल करने का प्रयास किया जाता है। यदि म्यूटेक्स पहले से उपयोग में है, तो फ़ंक्शन 0 लौटाता है। यदि म्यूटेक्स उपलब्ध है, तो मटेक्स म्यूटेक्स फ़ंक्शन म्यूटेक्स को अनुपलब्ध के रूप में चिह्नित करता है, और सफलता के लिए 1 देता है।

म्यूटेक्स को पकड़ने के लिए कोई भी अगली कॉल विफल हो जाएगी, जब तक कि सफलतापूर्वक म्यूटेक्स को पकड़ने वाले थ्रेड को वापस म्यूटेक्स फ़ंक्शन नहीं कहा जाता।

कोई भी थ्रेड जो म्यूटेक्स को पकड़ने में प्रयास करता है और विफल रहता है, उसे म्यूटेक्स सफलतापूर्वक पकड़ने तक (यानी थ्रेड म्यूटेक्स की प्रतीक्षा करेगा) तक लूप में डाल दिया जा सकता है। यहां एक समय भी स्थापित किया जा सकता है।

म्यूटेक्स ऑब्जेक्ट एक बूल के रूप में सरल हो सकता है, या आप अन्य जटिल म्यूटेक्स का उपयोग कर सकते हैं (windows.h में म्यूटेक्स ऑब्जेक्ट्स हैं)।

यदि आप अपना स्वयं का म्यूटक्स बनाते हैं, तो यह महत्वपूर्ण है कि यह अस्थिर हो।

यदि कोई म्यूटक्स का अधिकार नहीं है तो कोई थ्रेड डेटाबेस तक नहीं पहुंच सकता है।

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