Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में volatile कीवर्ड


परिचय

volatile कीवर्ड कंपाइलर और JIT को बताता है कि फ़ील्ड को अन्य थ्रेड्स द्वारा अप्रत्याशित रूप से संशोधित किया जा सकता है। यह कैशिंग और रीऑर्डरिंग ऑप्टिमाइज़ेशन को अक्षम करता है, ताकि हमेशा नवीनतम मान पढ़ा/लिखा जाए।

उदाहरण: फील्ड पर volatile

using System;
using System.Threading;

class Program
{
    // volatile: हर रीड/राइट मुख्य मेमोरी से
    public volatile bool _shouldStop = false;
    public string _message = "";

    public void Worker()
    {
        while (!_shouldStop) { /* व्यस्त प्रतीक्षा */ }
        Console.WriteLine(_message);
    }

    static void Main()
    {
        Program p = new Program();
        Thread workerThread = new Thread(p.Worker);
        workerThread.Start();

        Thread.Sleep(100);
        p._message = "Hello from main!";
        p._shouldStop = true; // volatile के बिना, वर्कर इसे देख नहीं पा सकता (कैश्ड)

        workerThread.Join();
        Console.WriteLine("Done.");
    }
}

मुख्य बिंदु

  • केवल फ़ील्ड्स पर लागू (प्रॉपर्टी, लोकल वेरिएबल पर नहीं)।
  • रेफरेंस टाइप्स के लिए: रेफरेंस volatile है, ऑब्जेक्ट सामग्री नहीं।
  • आधुनिक कोड में volatile कम उपयोग होता है; lock, Interlocked, CancellationToken, Task प्राथमिकता दें।
  • volatile मेमोरी बैरियर उत्पन्न करता है (acquire/release सेमेंटिक्स)।

सावधानी

volatile सभी थ्रेडिंग समस्याओं को हल नहीं करता (एटॉमिसिटी, रेस कंडीशन)। जटिल सिंक्रनाइज़ेशन के लिए lock या उच्च-स्तरीय प्राइमिटिव्स उपयोग करें।

  1. - C# में 'this' कीवर्ड

    C# में this कीवर्ड का उपयोग क्लास के वर्तमान इंस्टेंस को संदर्भित करने के लिए किया जाता है। इसका उपयोग मेथड पैरामीटर्स और क्लास फील्ड्स के बीच अंतर करने के लिए भी किया जाता है यदि दोनों का नाम समान हो। this कीवर्ड का एक अन्य उपयोग एक कंस्ट्रक्टर से उसी क्लास में दूसरे कंस्ट्रक्टर को कॉल करना है।

  1. - Java में volatile और transient के बीच अंतर

    volatile कीवर्ड का उपयोग मल्टीथ्रेडिंग वातावरण में किया जाता है जहां दो थ्रेड एक ही वैरिएबल को एक साथ पढ़ और लिख रहे होते हैं। volatile कीवर्ड परिवर्तनों को सीधे मेन मेमोरी में फ्लश करता है बजाय CPU कैश के। दूसरी ओर, transient कीवर्ड का उपयोग सीरियलाइज़ेशन के दौरान किया जाता है। जो फील्ड transient

  1. - क्या Java में this कीवर्ड का उपयोग स्टेटिक मेंबर्स को संदर्भित करने के लिए किया जा सकता है?

    नहीं, this कीवर्ड का उपयोग क्लास के स्टेटिक मेंबर्स को संदर्भित करने के लिए नहीं किया जा सकता। ऐसा इसलिए है क्योंकि this कीवर्ड क्लास के वर्तमान ऑब्जेक्ट को इंगित करता है और स्टेटिक मेंबर को कॉल करने के लिए किसी ऑब्जेक्ट की आवश्यकता नहीं होती। Java में क्लास के स्टेटिक मेंबर को ऑब्जेक्ट बनाए बिना सी