2011-01-29 3 views
8

जब नहीं एक static संदर्भ (है कि जब static कीवर्ड मौजूद नहीं है है, और आप वैश्विक दायरे में नहीं कर रहे हैं), क्या कर अंदर इस्तेमाल shared और __gshared कीवर्ड करते हैं?"साझा" और "__gshared 'डी में कीवर्ड

उदाहरण:

struct Temp 
{ 
     shared int i; 
    __gshared int j; 
} 

उत्तर

4

साझा पूर्णांक shared(int), जो कुछ नहीं करता, लेकिन यह है कि प्रकार देने के द्वारा लिखा गया है। __gshared int एक नो-ऑप है - डीएमडी नो-ऑप विशेषताओं को अनदेखा करने का शौक है।

+0

तो दूसरे शब्दों में, दोनों यहां व्यर्थ हैं? – Mehrdad

+4

__gshared एक नो-ऑप नहीं है। यह स्थिर है। – dsimcha

+3

इसके अलावा: जबकि 'साझा int' स्थानीय चर के लिए डीएमडी के वर्तमान कार्यान्वयन में केवल एक प्रकार क्वालीफायर (उदाहरण के लिए 'const') जैसा व्यवहार करता है, ठीक तरह से लागू' साझा '- जिस तरह से मैं इसे समझता हूं - पढ़ने-प्राप्त होना चाहिए और लिखने-रिलीज-सेमेन्टिक्स (यानी कई आर्किटेक्चर पर मेमोरी बाड़ का उपयोग करें और कुछ कंपाइलर अनुकूलन से बचें, http://www.digitalmars.com/d/2.0/faq.html#shared_memory_barriers) भी देखें। यह कभी-कभी स्थानीय चर के लिए भी प्रासंगिक होगा, उदाहरण के लिए, अन्य धागे के भीतर निष्पादित बंद होने के मामले में (या क्रॉस-थ्रेड स्टैक एक्सेस के दुर्लभ मामले में)। – stephan

1

डी 2 स्थानीय भंडारण के लिए डिफ़ॉल्ट, जबकि सी, सी ++ और डी 1 डिफ़ॉल्ट रूप से वैश्विक भंडारण के लिए डिफ़ॉल्ट है।

अंतरों में से एक यह है कि डी में एक वैश्विक चर अन्य धागे के लिए दृश्यमान है, जबकि टीएलएस नहीं है।

यह अधिक पसंद नहीं हो सकता है, लेकिन इसे महसूस किए बिना सी लाइब्रेरी में इंटरफेसिंग करने का प्रयास करें। (अपरिवर्तनीय है। वैश्विक भी)

आईएमई __gshared काफी सामान्य रूप से वैश्विक रूप से कुछ मजबूर करने के लिए मौजूद है, आमतौर पर यह नहीं होगा।

इसके लिए अन्य उपयोग भी हो सकते हैं, लेकिन मैंने कोई भी नहीं देखा है।

एक उदाहरण सी हेडर में एक वैश्विक चर होगा। यदि आप इसके साथ इंटरफ़ेस करने का प्रयास करते हैं, तो आपको अपरिवर्तनीय या __gshared की आवश्यकता होगी। निश्चित रूप से अन्य तरीके हैं, लेकिन यह शायद सबसे आसान है।

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