संपादित और जोहान्स के मूल्यवान जवाब के बाद मेरे सवाल का परिष्कृतक्या अस्थिरता आवश्यक है?
bool b = true;
volatile bool vb = true;
void f1() { }
void f2() { b = false; }
void(* volatile pf)() = &f1; //a volatile pointer to function
int main()
{
//different threads start here, some of which may change pf
while(b && vb)
{
pf();
}
}
तो चलिए थोड़ी देर के लिए तुल्यकालन भूल करते हैं। सवाल यह है कि बी को अस्थिर घोषित किया जाना है या नहीं। मैंने अस्थिर अर्थशास्त्र की औपचारिक परिभाषा को मानक और क्रमबद्ध पढ़ा है (मैं उन्हें लगभग समझता हूं, शब्द लगभग कुंजी है)। लेकिन चलो थोड़ा अनौपचारिक हो। यदि संकलक देखता है कि लूप में बी को बदलने के लिए कोई रास्ता नहीं है, तब तक जब तक बी अस्थिर न हो, तो यह इसे अनुकूलित कर सकता है और मान लेता है कि यह while(vb)
के बराबर है। सवाल यह है कि, इस मामले में पीएफ स्वयं अस्थिर है, तो क्या संकलक को यह मानने की अनुमति है कि बी लूप में नहीं बदलेगा, भले ही बी अस्थिर न हो?
कृपया टिप्पणियों और उत्तरों से बचें जो कोड के इस टुकड़े की शैली को संबोधित करते हैं, यह वास्तविक दुनिया का उदाहरण नहीं है, यह एक प्रयोगात्मक सैद्धांतिक प्रश्न है। टिप्पणियां और उत्तर, जो मेरे प्रश्न का उत्तर देने के अलावा, अस्थिरता के अर्थशास्त्र को अधिक विस्तार से संबोधित करते हैं, जो आपको लगता है कि मैंने गलत समझा है, बहुत स्वागत है।
मुझे आशा है कि मेरा प्रश्न स्पष्ट है। TIA
संपादन एक बार फिर:
इस बारे में क्या?
bool b = true;
volatile bool vb = true;
void f1() {}
void f2() {b = false;}
void (*pf)() = &f1;
#include <iosrteam>
int main()
{
//threads here
while(b && vb)
{
int x;
std::cin >> x;
if(x == 0)
pf = &f1;
else
pf = &f2;
pf();
}
}
क्या दो कार्यक्रमों के बीच एक प्रमुख अंतर है। यदि हां, तो क्या अंतर है?
मुझे सी बहुत अच्छी तरह से नहीं पता है। यदि यह कोड भी मान्य है (बूल के अलावा जो मुझे लगता है कि सी में मौजूद नहीं है), कृपया मुझे बताएं ताकि मैं प्रश्न में सी टैग भी जोड़ सकूं –
यह वैध सी है यदि आप # – ybungalobill
शामिल करें तो कृपया पहला कोड अपना प्रश्न उठाओ, और फिर पूछें। किसी के जवाब को लगातार बदलना कोई मजेदार नहीं है। इसके अलावा, धागे को बदलने की अनुमति क्या है (उचित सिंक्रनाइज़ेशन मानते हुए)? क्या कुछ हिस्सों के आसपास म्यूटेक्स हैं? (यानी "असाइन-पीएफ + कॉल" भाग के आसपास?) –