लघु जवाब:
हाँ, यह आम तौर पर संभव के बाद से हर धागा यह खुद ढेर और एक DLL फ़ंक्शन को कॉल है है, एक से अधिक थ्रेड से एक DLL फ़ंक्शन को कॉल करने के लिए है और अधिक या कम एक ही किसी अन्य को कॉल करने जैसा है अपने कोड का कार्य
लांग जवाब:
यदि यह है वास्तव में संभव का उपयोग कर एक परिवर्तनशील राज्य या नहीं साझा DLL कार्यों पर निर्भर करता है।
उदाहरण के लिए यदि आप कुछ इस तरह करते हैं:
DLL_SetUser(UserName, Password)
if DLL_IsAuthenticated then
begin
...
end;
तो यह सबसे निश्चित रूप से सुरक्षित नहीं अलग धागे से इस्तेमाल किया जा रहा है। इस उदाहरण में आप गारंटी नहीं दे सकते कि DLL_SetUser
और DLL_IsAuthenticated
के बीच कोई अन्य धागा DLL_SetUser
पर एक अलग कॉल करता है।
लेकिन यदि डीएलएल फ़ंक्शन किसी प्रकार की पूर्वनिर्धारित स्थिति पर निर्भर नहीं हैं, यानी सभी आवश्यक पैरामीटर एक साथ उपलब्ध हैं और सभी अन्य कॉन्फ़िगरेशन सभी थ्रेड के लिए समान हैं, तो आप मान सकते हैं कि यह काम करेगा।
if DLL_IsAuthenticated(UserName, Password) then
begin
...
end;
लेकिन सावधान रहें: यह एक DLL समारोह परमाणु दिखता है, लेकिन आंतरिक रूप से यह संभव हो सकता है कुछ है, जो नहीं है का उपयोग करता है। उदाहरण के लिए यदि डीएलएल हमेशा एक ही नाम के साथ एक अस्थायी फ़ाइल बनाता है या यह डेटाबेस तक पहुंचता है जो एक समय में केवल एक अनुरोध को संभाल सकता है, तो यह एक साझा स्थिति के रूप में गिना जाता है। (माफ करना, मैं बेहतर उदाहरण के बारे में सोच नहीं सकता था)
सारांश:
तो DLL विक्रेताओं का कहना है, कि उनके DLLs धागा सुरक्षित हैं मैं उन्हें एक से अधिक थ्रेड से ताला लगा के बिना उपयोग करेंगे। यदि वे नहीं हैं - या यहां तक कि यदि विक्रेताओं को पता नहीं है - आपको इसे सुरक्षित और लॉकिंग का उपयोग करना चाहिए।
कम से कम जब तक आप प्रदर्शन समस्याओं में भाग नहीं लेते। उस स्थिति में आप कई अनुप्रयोग/प्रक्रियाएं बनाने का प्रयास कर सकते हैं जो आपके डीएलएल कॉल को लपेटते हैं और उन्हें प्रॉक्सी के रूप में उपयोग करते हैं।
स्रोत
2009-04-11 08:00:10
एक और उदाहरण एक आंतरिक डेटा संरचना हो सकती है जहां निर्यात किए गए फ़ंक्शंस तत्वों को जोड़ते हैं और/या हटाते हैं - जैसे (विफल) प्रमाणीकरण अनुरोधों की सूची, या प्रमाणित उपयोगकर्ताओं की एक सूची। – mghie