2009-05-30 16 views
11

मैं परमाणु (डबल) तुलना और स्वैप निर्देशों का उपयोग कर लॉक-फ्री तंत्र को कार्यान्वित कर रहा हूं। cmpxchg16bलॉक-फ्री संरचनाओं के लिए सी ++ परमाणु संचालन

मैं वर्तमान में इसे असेंबली में लिख रहा हूं और फिर इसे जोड़ रहा हूं। हालांकि, मुझे आश्चर्य हुआ कि क्या संकलक को मेरे लिए यह स्वचालित रूप से करने का कोई तरीका था? जैसे चारों ओर कोड कोड 'परमाणु रूप से' है और क्या यह समझता है कि अंतर्निहित प्रोसेसर आर्किटेक्चर में परमाणु निर्देश के रूप में कोड को कैसे कार्यान्वित किया जाए (या अंतर्निहित आर्क इसका समर्थन नहीं करता है) संकलित समय में त्रुटि उत्पन्न करें?

पीएस मुझे पता है कि जीसीसी कुछ बनाया-इन (कम से कम कैस के लिए)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

उत्तर

11

पहले से ही उत्तर दिया गया here

सी ++ 0x मानक कुछ atomic datatypes प्रदान करेगा, मुख्य रूप से पूर्णांक और शून्य प्रकार std :: atomic <> टेम्पलेट का उपयोग कर प्रदान करेगा। उस आलेख में Boehm's atomic_ops project का उल्लेख है जिसे आप आज डाउनलोड और उपयोग कर सकते हैं।

यदि नहीं, तो क्या आप संकलक में अपने असेंबलर इनलाइन को लागू नहीं कर सकते? मुझे पता है कि एमएसवीसी में इनलाइन असेंबलर रूटीन के लिए __asm कीवर्ड है। Google कहता है yes, जीसीसी can do it too

+8

एमएसवीसी ने ओप को इंटरलॉक किया है, और जीसीसी ने अंतर्निहित परमाणु कार्यों का निर्माण किया है, इसलिए इनलाइन असेंबलर को करने की कोई आवश्यकता नहीं है। कंपाइलर रैपर का उपयोग करके, आप कंपाइलर – bdonlan

+0

द्वारा समर्थित सभी प्लेटफॉर्म पर पोर्टेबल रहेंगे, एमएसवीसी ने केवल लंबे डेटाटाइप के लिए ओप को इंटरलॉक किया है, ओपी डबल्स चाहता था। – gbjbaanb

+0

जीसीसी ने डीडब्ल्यूसीएएस के लिए ओप में कोई निर्माण नहीं किया है। एमएसवीसी ने डीडब्ल्यूसीएएस के लिए बनाया है। कोई ओएस में वृद्धि, कमी, इत्यादि के लिए डीडब्ल्यू (डबल शब्द, उदाहरण के लिए दो पॉइंटर लंबाई, तरफ से तरफ) नहीं है - डीडब्ल्यू केवल मौजूद है और केवल सीएएस के लिए मौजूद है (और केवल अस्तित्व में है)। –

5

भविष्य "C++ 0x" सी ++ के लिए मानक परमाणु संचालन का समर्थन करेंगे & सी है - जैसे देखना एक उचित थोरॉट चर्चा के लिए http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html। जब तक कहा गया कि आगामी मानक अनुमोदित और व्यापक रूप से कार्यान्वित नहीं किया गया है, बेशक, इस तरह की कार्यक्षमता को "पोर्टेबल" कंपेलरों में प्राप्त करने का कोई तरीका नहीं है; यदि आप जीसीसी से परे विशिष्ट कंपाइलर्स में रूचि रखते हैं, तो शायद आप उनके बारे में एक और सवाल खोल सकते हैं।

+0

सुनिश्चित नहीं है कि मुझे कुछ याद आ रहा है लेकिन लिंक आलेख प्रासंगिक प्रतीत नहीं होता है। – bugmenot77

+0

आप सही हैं, गलत यूआरएल चिपकाया - अब ठीक करने के लिए संपादन, धन्यवाद! –

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