2010-07-05 19 views
16

उदाहरण के लिए यह सुरक्षित है:क्या यह एक ही फ़ंक्शन को कॉल करने के लिए एकाधिक धागे के लिए सुरक्षित है?

void AddTwo(int &num) 
{ 
    num +=2; 
} 


void ThreadProc(lpvoid arg) 
{ 
AddTwo((int)arg); 

} 

क्या यह तब होता है जब 4 थ्रेड एक ही समय में ऐसा कर रहे हों? धन्यवाद

+1

'arg' कहां से आता है? –

+0

मैंने अभी यह एक उदाहरण के रूप में किया है, मुझे पता है कि यह 'सही' नहीं है – jmasterx

उत्तर

20

फ़ंक्शन स्वयं कॉल करने के लिए सुरक्षित है। यह खतरनाक हो जाता है अगर वे सभी एक ही चर पर काम करने की कोशिश कर रहे हैं।

+0

आपका मतलब है कि एक वैरिएबल फ़ंक्शन का हिस्सा नहीं है जिसे सही कहा जा रहा है, जैसे कि AddTwo ने वैश्विक चर को संशोधित किया है? – jmasterx

+2

सही। मैं पते 'num' संदर्भों के बारे में बात कर रहा हूं, न कि 'num' स्वयं। एकाधिक धागे से वैश्विक चर को संशोधित करने का प्रयास करने का आपका उदाहरण समस्या मामलों में से एक है। – Shirik

+0

ठीक है, ठीक है मेरा आवेदन काम को विभाजित कर देगा, इसलिए यह कोई समस्या नहीं होनी चाहिए, धन्यवाद! – jmasterx

2

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

1

सुरक्षितता lpvoid arg के मान पर निर्भर करती है।

यदि सभी तर्क एक-दूसरे से अलग हैं, तो अन्यथा सुरक्षित नहीं है।

फ़ंक्शन कॉल सुरक्षित करने के लिए, 'mutex' देखें।

0

असली जवाब है - यह निर्भर करता है ...

सबसे प्लेटफार्मों पर, हाँ यह लंबे समय से आप कुछ भी समारोह, जो दूसरों का उल्लेख किया है में असुरक्षित नहीं करते के रूप में के रूप में सुरक्षित है। गड़बड़ करना आसान है इसलिए सावधान रहें!

अन्य प्लेटफॉर्म पर यह निश्चित रूप से असुरक्षित है। उदाहरण के लिए छोटे पीआईसी माइक्रोकंट्रोलर के लिए अधिकांश सी कंपाइलर्स हार्डवेयर सीमाओं के कारण इसका समर्थन नहीं कर सकते हैं।

सामान्यतः, हाँ यह सुरक्षित है हालांकि।

1

अंगूठे के सामान्य नियम के रूप में, यदि कोई सामान्य संसाधन (जैसे समान स्मृति स्थान) को परिवर्तित नहीं करता है तो एक फ़ंक्शन पुन: प्रवेश होता है। यदि ऐसा होता है, तो आपको म्यूटेक्स या सेमफोरस जैसे कुछ प्रकार के सिंक्रनाइज़ेशन तंत्र का उपयोग करने की आवश्यकता होती है।

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

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