OpenMP मानक (< = 4.0) atomic
के बारे में कहते हैं:एक संदर्भ प्रकार पर ओपनएमपी परमाणु?
#pragma omp atomic [read | write | update | capture ] new-line
expression-stmt
जहां
expression-stmt
निम्नलिखित रूपों में से एक के साथ एक अभिव्यक्ति कथन है:
...
हैं खंड अद्यतन है या मौजूद नहीं है:
x++;
...
पूर्ववर्ती भाव में:
x
औरv
(जो लागू हो) दोनों अदिश प्रकार के साथ एल-मूल्य अभिव्यक्तियां हैं। है एक अदिश this post के अनुसार, एक संदर्भ (यहाँint& reference
) नहीं:
...
तो, जब मैं इस सही ढंग से व्याख्या, निम्नलिखित लघु कोड स्निपेट अवैध है:
int main()
{
int myCounter = 0;
int& reference = myCounter;
#pragma omp parallel for
for (int i = 0; i < 100; ++i)
{
#pragma omp atomic
reference++; // Increment through reference.
}
return 0;
}
कारण प्रकार। लेकिन मानक स्पष्ट रूप से बताता है कि atomic
का उपयोग करने के लिए यह एक होना चाहिए।
कोड किसी भी चेतावनी के बिना g ++ के साथ संकलित करता है (-Wall -Wextra
)।
मेरा प्रश्न है: क्या मैंने मानक, या सी ++ के "संदर्भ प्रकार" की अवधारणा को गलत समझा है? या अधिकांश संकलक इस कोड को संकलित करते हैं, क्योंकि अन्यथा atomic
का उपयोग गंभीर रूप से सीमित है (मूल रूप से ढेर पर कोई डेटा atomic
का लक्ष्य नहीं हो सकता है, क्योंकि आपको हमेशा संदर्भ या एक संदर्भित सूचक की आवश्यकता होती है)?
स्पष्टीकरण के लिए बहुत धन्यवाद :) – Gugi