इस वर्ग
class CData
{
public:
static void func()
{
int a;
static int b;
}
int c;
static int d;
};
int main()
{
CData::func();
}
अब चर a
func()
से प्रत्येक कॉल करने के लिए स्थानीय है पर विचार करें। यदि दो धागे एक ही समय में func()
पर कॉल करते हैं, तो उन्हें a
के विभिन्न संस्करण मिलते हैं।
b
एक स्थिर स्थानीय है।मान func()
की विभिन्न कॉल के बीच बनी हुई है। यदि दो धागे एक ही समय में func()
पर कॉल करते हैं, तो वे b
के समान संस्करण तक पहुंचते हैं ताकि उन्हें सिंक्रनाइज़ेशन करने की आवश्यकता हो।
c
एक उदाहरण चर है; यह सीडीटा के एक विशेष तत्कालता से जुड़ा हुआ है। func()
c
तक नहीं पहुंच सकता है, एक चाल के अलावा मैं नीचे दिखाऊंगा।
d
एक स्थिर चर है। d
का एक उदाहरण क्लास सीडीटा के सभी उपयोगों के बीच साझा किया गया है, इसलिए सिंक्रनाइज़ेशन आवश्यक हो सकता है। इसका उपयोग स्थिर फ़ंक्शन func()
से आसानी से किया जा सकता है।
एक स्थिर फ़ंक्शन से इंस्टेंस डेटा तक पहुंचने के लिए उपयोग की जाने वाली चाल फ़ंक्शन में मान्य ऑब्जेक्ट को पास करना है।
उदा।
class CData
{
public:
static void func(CData *p)
{
int a;
static int b;
b = p->c;
}
int c;
static int d;
};
int main()
{
CData data;
CData::func(&data);
}
आशा है कि मदद करता है।
स्रोत
2011-01-06 18:48:19
[स्थिर सदस्य फ़ंक्शन और थ्रेड-सुरक्षा] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4509850/static-member-function-and-thread-safety) – Suma
टोनी, क्यों, पृथ्वी पर, आप हैं एक ही सवाल फिर से पूछना? – Suma
@ सुमा मैंने अपना खुद का प्रश्न बंद करने के लिए वोट दिया, भूल गया मैंने पहले ही यह पूछा था ... –