मैं सी # में Volatile
कीवर्ड का वास्तविक समय उपयोग देखना चाहता हूं। लेकिन सबसे अच्छा उदाहरण प्रोजेक्ट करने में असमर्थ हूं। नीचे नमूना कोड Volatile
कीवर्ड के बिना काम करता है यह कैसे संभव हो सकता है?सी # में अस्थिर कीवर्ड उद्देश्य क्या है?
class Program
{
private static int a = 0, b = 0;
static void Main(string[] args)
{
Thread t1 = new Thread(Method1);
Thread t2 = new Thread(Method2);
t1.Start();
t2.Start();
Console.ReadLine();
}
static void Method1()
{
a = 5;
b = 1;
}
static void Method2()
{
if (b == 1)
Console.WriteLine(a);
}
}
उपरोक्त कोड में मुझे 5 के रूप में मूल्य मिल रहा है। यह अस्थिर कीवर्ड का उपयोग किए बिना कैसे काम करता है?
यह काम नहीं करता है। चूंकि आप 'अस्थिर' का उपयोग करना भूल गए हैं, तो आप 5 से कम कुछ मूल्य प्राप्त करने की उम्मीद करते हैं। फिर भी आपको 5 मिलते हैं। तो यह * काम नहीं कर रहा है, जो आप कुछ छोड़ने की अपेक्षा करेंगे। (बग को ठीक करें और रहस्य दूर हो जाएगा। थ्रेडिंग बग के साथ कोड समझना लगभग असंभव है। बस उन्हें ठीक करें और इसके बारे में भूल जाओ।) –
क्या आप मुझे अस्थिरता के लिए एक बेहतरीन उदाहरण बता सकते हैं? – Gun
अब, बिना किसी 'अस्थिर' कीवर्ड के, कोई ** गारंटी ** नहीं है कि प्रोग्राम '0' आउटपुट नहीं करेगा। यह (कुछ दिन) आउटपुट '0' हो सकता है। यदि आप 'अस्थिर' कीवर्ड जोड़ते हैं, तो यह '0' आउटपुट नहीं कर सकता है, यह केवल _either_ आउटपुट _or_ '5' दे सकता है। –