2017-02-01 10 views
5

मुझे कोई अनुमान नहीं है कि इस समारोह के लिए "सी ++" लिंक के बजाय "सी" क्यों होना वांछनीय होगा।std :: atomic_thread_fence के पास "सी" लिंक क्यों है?

+4

ऐसा इसलिए हो सकता है क्योंकि वही कार्य 'सी' http://en.cppreference.com/w/c/atomic/atomic_thread_fence में मौजूद है और यह केवल आयात किया गया है (std namespace में) संस्करण? –

उत्तर

0

atomic_thread_fence गैर-परमाणु और आराम से परमाणु पहुंच के स्मृति सिंक्रनाइज़ेशन ऑर्डरिंग को स्थापित करता है।
Concurrency, विशेष रूप से आराम से स्मृति concurrency, एक कुख्यात सूक्ष्म और त्रुटि प्रवण डोमेन है, और इसलिए इस तरह के अनुकूलन की पुष्टि बहुत रुचि है। Ref1
ऐसी चीज के लिए व्यापक रूप से CompCertTSO का उपयोग किया जाता है।
CompCertTSO एक कंपाइलर है जो क्लाइट्सओ से x86 असेंबली कोड उत्पन्न करता है, सी प्रोग्रामिंग भाषा का एक बड़ा सबसेट थ्रेड प्रबंधन और सिंक्रनाइज़ेशन के लिए समवर्ती प्राइमेटिव के साथ बढ़ाया गया है, और x86-TSO मॉडल के आधार पर एक टीएसओ आराम से स्मृति मॉडल के साथ।

तो, सत्यापन के लिए, अनुकूलन और परीक्षण उद्देश्यों के लिए इस कार्य के लिए "सी" संबंध होना वांछनीय है।

5

यह LWG issue 1479 द्वारा जोड़ा गया था जो C++ 11 पर अंतिम मिनट की टिप्पणी को संबोधित कर रहा था।

इस परिवर्तन के लिए तर्क सी भाषा संगतता थी (सी 11 थ्रेड लाइब्रेरी समान रूप से नामित फ़ंक्शन atomic_thread_fence stdatomic.h में है)।

जहां तक ​​मैं समझता हूं, यह हमेशा एक योजना थी कि सी और सी ++ परमाणु पुस्तकालयों का सह-अस्तित्व हो सकता है: compatiblity के अन्य उदाहरण std :: atomic के लिए सी-संगत प्रकार उपनाम हैं, जैसे atomic_int और सी-संगतता मैक्रो ATOMIC_VAR_INIT

+0

मुझे समझ में नहीं आता कि सी और सी ++ प्रोटोटाइप कैसे संगत हैं, यह देखते हुए कि सी ++ प्रोटोटाइप std नेमस्पेस में है। – WaltK

+0

@WaltK मुझे लगता है कि यह '' के C++ कार्यान्वयन को ' 'शामिल करने की अनुमति देता है और फिर' नेमस्पेस std {का उपयोग :: atomic_thread_fence; } 'या कुछ समकक्ष। बेशक यह 'atomic_flag_test_and_set' की सहायता नहीं करता है, जिसमें अभी भी सी ++ में सी ++ लिंकेज है - शायद एनबी टिप्पणी को अच्छी तरह से नहीं सोचा गया था। – Cubbi

+3

@ वाल्टके बिल्कुल 'पाप' या 'printf' की तरह। –

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