C99 sig_atomic_t
केवल "atomicity" का एक बहुत कमजोर परिभाषा के अनुरूप है, क्योंकि C99 संगामिति की कोई अवधारणा, केवल interruptibility है। (C2011 संगामिति मॉडल कहते हैं, और इसके साथ _Atomic
प्रकार है कि मजबूत गारंटी है, लेकिन, AFAIK sig_atomic_t
, अपरिवर्तित है के बाद से अपने किशमिश अभी भी संकेत संचालकों के साथ संचार होता है, धागे भर में नहीं।)
यह सब कुछ C99 कहते है के बारे में sig_atomic_t
:
(§7.14 <signal.h>
, पैरा 2) प्रकार परिभाषित sig_atomic_t
, जो है (संभवतः अस्थिर योग्य) एक वस्तु है कि एक परमाणु इकाई के रूप में पहुँचा जा सकता है की पूर्णांक प्रकार है, असीमित इंटरप्ट की उपस्थिति में भी। (§7.14 <signal.h>
, पैरा 2)
(§7.14p5) यदि [एक] संकेत abort
या raise
फ़ंक्शन कॉल के परिणाम के रूप के अलावा अन्य होता है, व्यवहार अपरिभाषित यदि संकेत हैंडलर स्थिर साथ किसी भी वस्तु को संदर्भित करता है volatile sig_atomic_t
के रूप में घोषित ऑब्जेक्ट को मान निर्दिष्ट करने के अलावा अन्य संग्रहण अवधि।
तो sig_atomic_t
(7.14 देखें) एक हस्ताक्षरित पूर्णांक प्रकार के रूप में परिभाषित किया गया है (§7.18.3 अन्य पूर्णांक प्रकार, पैरा 3 की सीमाएं), SIG_ATOMIC_MIN
का मूल्य नहीं -127 से अधिक होगी और SIG_ATOMIC_MAX
का मूल्य होगी 127 से कम नहीं; अन्यथा, sig_atomic_t एक अहस्ताक्षरित पूर्णांक प्रकार के रूप में परिभाषित किया गया है, और SIG_ATOMIC_MIN
का मान 0 होगा और SIG_ATOMIC_MAX
का मूल्य होगी कोई कम से कम 255.
शब्द "परमाणु इकाई" कहीं भी मानक में निर्धारित नहीं है । मानकों से अनुवाद, ese, इरादा यह है कि सीपीयू एक मशीन निर्देश के साथ स्मृति ("स्थिर भंडारण अवधि") में sig_atomic_t
प्रकार के चर को पूरी तरह अद्यतन कर सकता है। इस प्रकार, समेकन मुक्त, सटीक अंतःक्रियात्मक सी 99 सार मशीन में, सिग्नल हैंडलर के लिए sig_atomic_t
अद्यतन के माध्यम से अद्यतन के माध्यम से आधे रास्ते का निरीक्षण करना असंभव है। §7.18।यदि आवश्यक हो तो 3 एमपी भाषा लाइसेंस इस प्रकार char
जितना छोटा हो। नोट क्रॉस प्रोसेसर स्थिरता से संबंधित किसी भी भाषा के पूर्ण अनुपस्थिति कृपया ध्यान दें।
वास्तविक CPUs हैं जिन्हें स्मृति के लिए char
से अधिक मान लिखने के लिए एक से अधिक निर्देशों की आवश्यकता होती है। वास्तविक CPUs भी हैं जिन्हें मान शब्द (अक्सर, लेकिन आवश्यक नहीं है, int
) स्मृति से स्मृति के लिए एक से अधिक निर्देशों की आवश्यकता होती है। जीएनयू सी लाइब्रेरी मैनुअल में भाषा अब गलत है। यह मूल लेखकों के हिस्से पर एक इच्छा का प्रतिनिधित्व करता है जो उन्होंने सी कार्यान्वयन के लिए अनावश्यक लाइसेंस के रूप में देखा जो अजीब छल करने के लिए किया गया है जिससे एप्लिकेशन प्रोग्रामर के लिए जीवन कठिन हो गया है। दुर्भाग्यवश, वह लाइसेंस है जो कुछ वास्तविक मशीनों पर सी को संभव बनाता है। कम से कम एक एम्बेडेड लिनक्स पोर्ट (एवीआर में) है जिसके लिए न तो int
और न ही पॉइंटर्स को एक निर्देश में स्मृति में लिखा जा सकता है। (लोग मैन्युअल को अधिक सटीक बनाने पर काम कर रहे हैं, उदाहरण के लिए http://sourceware.org/ml/libc-alpha/2012-02/msg00651.html - sig_atomic_t
उसमें याद किया गया है, हालांकि।
@chrisaycock: सी? क्या यह किसी भी भाषा को 'sig_atomic_t' चरों तक पहुंच के साथ लागू नहीं करेगा? मैं आसानी से 'g ++' का उपयोग कर सकता था। – smcdow
'sig_atomic_t' प्रकार वास्तव में सी विनिर्देश का हिस्सा है। यह सी ++ विनिर्देश में भी पाया जाता है (जैसा कि ज्यादातर चीजें हैं), लेकिन आपको सी टैग के साथ अच्छे जवाब मिलेंगे। –
सी इसकी गारंटी नहीं देता है। विशिष्ट CPUs में कुछ प्रकार की परमाणुता के लिए विशिष्ट गारंटी होती है। विशेष रूप से, डेस्कटॉप सिस्टम में उपयोग किए जाने वाले आधुनिक सीपीयू कम से कम गठबंधन 'int' (यानी प्लेटफ़ॉर्म-शब्द-आकार वाले डेटा) के लिए परमाणुता की गारंटी देते हैं। यह पुराने CPUs के लिए, या एम्बेडेड सिस्टम में उपयोग किए गए CPUs के लिए मामूली रूप से मामला नहीं है। – ninjalj