यह पूरी प्रक्रिया के लिए दृश्यमान है, यानी सभी धागे। बेशक, यह अभ्यास में है। सिद्धांत रूप में, आप यह नहीं कह सकते थे क्योंकि धागे के पास सी मानक के साथ कुछ लेना देना नहीं है (कम से कम सी 99 तक, जो मानक है जो इस सवाल से पूछा गया था)।
लेकिन मेरे द्वारा उपयोग किए जाने वाले सभी थ्रेड पुस्तकालयों में सभी धागे के लिए ग्लोबल्स पहुंच योग्य होंगे।
अद्यतन 1:
कई धागा पुस्तकालयों (pthreads, के लिए एक) आप एक साधन धागा-विशिष्ट डेटा बनाने के लिए, कार्य बना सकते हैं और बिना धागे के लिए विशिष्ट डेटा का उपयोग करने के लिए अनुमति देगा यह समारोह के माध्यम से पारित किया।
तो, उदाहरण के लिए, छद्म यादृच्छिक संख्याओं को वापस करने के लिए एक फ़ंक्शन प्रत्येक थ्रेड को एक स्वतंत्र बीज प्राप्त करना चाह सकता है। इसलिए प्रत्येक बार इसे इसे बुलाया जाता है या तो उस बीज को पकड़ने वाले थ्रेड-विशिष्ट ब्लॉक को बनाता है या जोड़ता है (किसी प्रकार की कुंजी का उपयोग करके)।
यह फ़ंक्शंस को गैर-थ्रेडेड वाले (यदि वे उदाहरण के लिए आईएसओ सी फ़ंक्शन हैं) के समान हस्ताक्षर बनाए रखने की अनुमति देता है क्योंकि अन्य समाधान में फंक्शन कॉल में थ्रेड-विशिष्ट पॉइंटर जोड़ना शामिल है।
int fDone[10];
int idx;
: : :
for (i = 0; i < 10; i++) {
idx = i;
startThread (function, i);
while (idx >= 0)
yield();
}
void function() {
int myIdx = idx;
idx = -1;
while (1) {
: : :
}
}
यह धागा समारोह कही जाने वाली जो सरणी में वैश्विक चर यह के अंतर्गत आता है की अनुमति होगी:
एक और संभावना है जैसे वैश्विक जिनमें से प्रत्येक धागा एक हो जाता है, की एक सरणी है ।
अन्य विधियां हैं, इसमें कोई संदेह नहीं है, लेकिन आपके लक्षित माहौल को जानने से कम, उनके बारे में चर्चा करने में कोई बात नहीं है।
अद्यतन 2:
सबसे आसान तरीका एक थ्रेडेड वातावरण में एक गैर धागा सुरक्षित पुस्तकालय का उपयोग करने के म्युटेक्स संरक्षण के साथ आवरण कॉल प्रदान करना है।
उदाहरण के लिए, कहें कि आपकी लाइब्रेरी में गैर-थ्रेड-सुरक्षित doThis()
फ़ंक्शन है।
void myDoThis (a, b) {
static mutex_t serialize;
mutex_claim (&serialize);
doThis (a, b);
mutex_release (&serialize);
}
क्या होगा यह है कि एक समय में केवल एक धागा म्युटेक्स दावा करने के लिए (और इसलिए गैर धागा सुरक्षित समारोह कहते हैं) में सक्षम हो जाएगा: तुम क्या इसके लिए एक आवरण प्रदान करना है। अन्य मौजूदा रिटर्न तक अवरुद्ध हो जाएंगे।
एक परिवर्तनीय स्थैतिक घोषित करने से यह फ़ाइल स्कोप चर बन जाता है। इसे गैर स्थैतिक घोषित करना इसे वैश्विक बनाता है। –
उस स्पष्टीकरण के लिए धन्यवाद। – jameszhao00
आप किस ओएस का उपयोग करते हैं? मुझे लगता है कि अद्यतन 2 के लिए मंच विशिष्ट समाधान हो सकता है। –