मान लें चलो मेरे पास है एक:थ्रेड सुरक्षा और स्थिर कार्यों
class base
{
base(){f(this);};
static void f(base * b) {(b->d)++;};
int d;
};
अब अगर 2 अलग धागे पर मैं प्रकार आधार की एक वस्तु बनाने के लिए, विधि धागा सुरक्षित माना जा f
हैं? मैं इस सवाल से पूछ रहा हूं क्योंकि आमतौर पर मुझे पता है कि थ्रेड सुरक्षित होने के तरीके के लिए इसे स्थिर सदस्यों और न ही वैश्विक चर का उपयोग नहीं करना चाहिए। लेकिन जैसा कि आप उपर्युक्त उदाहरण से देख सकते हैं, मैंने तय किया कि वे d
स्थिर नहीं बनाते हैं, इसके बजाय मैं इसे आधार के चल रहे उदाहरण के माध्यम से कॉल करता हूं।
इसके अलावा, मुझे लगता है कि मुझे इस लाइन की रक्षा करने की आवश्यकता नहीं है: (b->d)++;
एक म्यूटेक्स के साथ क्योंकि प्रत्येक थ्रेड के आधार और परिवर्तनीय डी का एक अलग उदाहरण होगा।
क्या मैं अपने विश्लेषण में सही हूं? क्या मुझे कुछ भी सावधान रहना चाहिए?
आप सही हैं, जब तक कि बेस पॉइंटर्स थ्रेड विशिष्ट हैं, आप अच्छे हैं। – perreal
क्या आप अपने प्रोग्राम को संकलित करने में सक्षम हैं? इसे एक संकलन त्रुटि – stamhaney
@stamhaney फेंकना चाहिए, नहीं, मैं सिर्फ सिद्धांत को काम करने की कोशिश नहीं कर रहा हूं :) कृपया समस्या को इंगित करें हालांकि – Kam