Thread Synchronization c# In Hindi

Thread Synchronization c# In Hindi

C# प्रोग्रामिंग लैंग्वेज में थ्रेड सिंक्रोनाइज़ेशन प्रोग्रामिंग बिहैवियर एक एडवांस्ड कांसेप्ट या मेथड है, C# में थ्रेड सिंक्रोनाइज़ेशन का यूज़ मल्टीथ्रेडेड प्रोग्रामिंग कांसेप्ट में कई प्रोग्राम थ्रेड्स लेयर को कोऑर्डिनेट या ग्रुप करने और थ्रेड सिंक्रोनाइज़ेशन में अवेलेबल शेयर्ड प्रोग्राम रिसोर्स तक डायरेक्ट एक्सेस को सिक्योर आर्डर में मैनेज करने में किया जाता है।

Thread Synchronization c# In Hindi

C# प्रोग्राम में, जब कई प्रोग्राम थ्रेड्स एक साथ रन होते हैं, तो ये सभी अवेलबल प्रोग्राम थ्रेड्स एक ही समय में एक ही मेमोरी लोकेशन, पैरामीटर वेरिएबल, फ़ाइल या डाटा ऑब्जेक्ट को एक्सेस या मॉडिफ़ाई करने के लिए इम्प्लीमेंट कर सकते हैं। कई बार इससे फाल्स रिजल्ट और अनप्रेडिक्टेबल प्रोग्राम थ्रेड्स बिहेवियर जनरेट हो सकता है।

Thread synchronization special features in C#.

  • C# प्रोग्राम में क्रिएटेड थ्रेड एक समय में सिर्फ़ कम से कम एक थ्रेड एसेंशियल कोड को एक्सेस करे.
  • क्रिएटेड थ्रेड प्रोग्राम में थ्रेड शेयर्ड डेटा एक जैसा बना रहे.
  • यूजर डिफाइन प्रोग्राम क्रिएटेड थ्रेड्स कंट्रोल्ड प्रॉपर आर्डर में एग्जीक्यूट हों.

Why is thread synchronization needed in C#?

C# प्रोग्राम में एक शेयर्ड वेरिएबल को एनालाइज करे.

int test = 0;

यहाँ माना की इसमें दो थ्रेड्स एग्जीक्यूट होते हैं.

test++;

यहाँ test++ इन्क्रीमेंट वेरिएबल ऑपरेशन एक सिंगल स्टेप नहीं है। इंटरनली यह कई तरीके से काम करता है.

  • यह test की करंट वैल्यू को रीड करता है.
  • test वेरिएबल की वैल्यू को हर लूप इटरेट कंडीशन अपडेट पर इनक्रीस करता है.
  • अंत में रिजल्ट के रूप में test वेरिएबल को अपडेटेड वैल्यू में स्टोर करता है।

यदि इस कांसेप्ट में यहाँ दो प्रोग्राम थ्रेड्स इन स्टेप्स को एक साथ एग्जीक्यूट करते हैं. तो इसमें एक प्रोग्राम अपडेट दूसरे को ओवरराइट कर सकता है।

यहाँ इसमें इस प्रॉब्लम को रेस कंडीशन के रूप में जाना जाता है।

Example of a race condition/synchronization (without synchronization) in a C#.

using System;

using System.Threading;

class Program

{

    static int tester = 0;

    static void Increase()

    {

        for (int p = 0; p < 50000; p++)

        {

            tester++;

        }

    }

    static void Main()

    {

        Thread thrd1 = new Thread(Increase);

        Thread thrd2 = new Thread(Increase);

        thrd1.Start();

        thrd2.Start();

        thrd1.Join();

        thrd2.Join();

        Console.WriteLine(“The value of tester is = ” + tester);

    }

}

race condition/synchronization explanation.

  • यहाँ इस प्रोग्राम में थ्रेड सिंक्रोनाइज़ेशन प्रोसेस में टेस्टर वेरिएबल हर बार प्रोग्राम वैल्यू को चेक कर अलग अलग रैंडम थ्रेड आउटपुट को जनरेट करता है.
  • यहाँ टेस्टर आउटपुट के रूप में रिजल्ट 100000 से कम वैल्यू होता है, क्योंकि इसमें दोनों यूजर क्रिएटेड थ्रेड एक साथ टेस्टर वेरिएबल वैल्यू को अपडेट करते हैं।

Solving the problem using the thread synchronization method.

Using locks in thread synchronization.

C# थ्रेड सिंक्रोनाइज़ेशन प्रोग्राम में लॉक स्टेटमेंट एक बार में सिर्फ़ एक ही थ्रेड को प्रोग्राम सोर्स कोड के एक ब्लॉक को एग्जीक्यूट करने की परमिशन प्रोवाइड करता है।

Example of locks in thread synchronization.

using System;

using System.Threading;

class Program

{

    static int tester = 0;

    static readonly object lockElement = new object();

    static void Increase()

    {

        for (int p = 0; p <= 50000; p++)

        {

            lock (lockElement)

            {

                tester++;

            }

        }

    }

    static void Main()

    {

        Thread thrd1 = new Thread(Increase);

        Thread thrd2 = new Thread(Increase);

        thrd1.Start();

        thrd2.Start();

        thrd1.Join();

        thrd2.Join();

        Console.WriteLine(“the result of tester is – ” + tester);

    }

}

locks in thread synchronization explanation.

  • यहाँ इस प्रोग्राम में lockelement मौजूदा थ्रेड ऑब्जेक्ट को रन कर लॉक कर देता है.
  • यहाँ इसका आउटपुट 100002 रिजल्ट है, जब इसे लॉक किया जाता है. तो इसमें स्टोर्ड रिसोर्सेज एक शेयर्ड रिसोर्स के रूप में प्रोटेक्ट हो जाते है.

How locks work in thread synchronization.

  • जब कोई यूजर डिफाइन थ्रेड लॉक प्रोग्राम ब्लॉक में एंटर करता है.
  • तो यह एक थ्रेड ऑब्जेक्ट लॉक कंडीशन को अडॉप्ट करता है
  • दूसरे सिस्टम लोक थ्रेड्स को यहाँ वेट करना होगा।
  • थ्रेड प्रोग्राम एग्ज़िक्यूशन के बाद, प्रोगाम में क्रिएट लॉक रिलीज़ हो जाता है.
  • इसके बाद सेकंड वेटेड लॉक थ्रेड प्रोसेस में एंटर कर सकता है.
  • यह कम्पलीट प्रोसेस आपको एक थ्रेड-सेफ़ एग्ज़िक्यूशन प्रोसेस मैकेनिज्म की गारंटी प्रोवाइड करता है।

Essential Thread Synchronization Concept Behaviour in C#.

Critical Thread Section.

क्रिटिकल सेक्शन प्रोग्राम सोर्स कोड का वह पोरशन होता है, जहाँ शेयर्ड रिसोर्स एक्सेस किए जाते हैं।

Example of a Critical Thread Section.

tester++;

यहाँ थ्रेड में इस सेक्शन को सिंक्रोनाइज़ किया जाना चाहिए।

Mutual Exclusion in Thread Synchronization.

यहाँ इसमें यह एक समय में सिर्फ़ एक थ्रेड क्रिटिकल सेक्शन में ही एंटर या डील कर सकता है।

यहाँ इसे म्यूचुअल एक्सक्लूज़न प्रोसेस के रूप में जाना जाता हैं।

Deadlock in Thread Synchronization.

थ्रेड सिंक्रोनाइज़ेशन इवेंट में डेडलॉक तब जनरेट होता है, जब दो या ज़्यादा थ्रेड हमेशा एक-दूसरे का प्रोसेस में वेट करते हैं।

Example of a deadlock in thread synchronization.

  • यहाँ थ्रेड 1 लॉक P को होल्ड करता है, और नेक्स्ट प्रोसेस में लॉक Q का वेट करता है.
  • इसी क्रम में थ्रेड 2 लॉक Q को होल्ड करता है, और लॉक P का वेट करता है, और दोनों प्रोसेस होल्ड हो जाते हैं।

Thread Synchronization Techniques in C# Methods.

lock in Thread Synchronization.

यह थ्रेड सिंक्रोनाइज़ेशन में सबसे सिंपल और सबसे अधिक यूज़ होने वाला सिंक्रोनाइज़ेशन मैकेनिज्म या मेथड है।

lock(lockElement)

{

    // here we can define a critical section

}

Monitor in Thread Synchronization.

यह आपको थ्रेड सिंक्रोनाइज़ेशन प्रोसेस में एडवांस्ड थ्रेड एलिमेंट ऑब्जेक्ट लॉकिंग फ़ीचर प्रोवाइड करता है।

Methods of Monitor in Thread.

  • Enter()
  • Exit()
  • TryEnter()
  • Wait()
  • Pulse()

Example of Monitor in Thread Synchronization.

Monitor.Enter(lockElement);

try

{

    tester++;

}

finally

{

    Monitor.Exit(lockElement);

}

Mutex in Thread Synchronization.

यह आपको थ्रेड सिंक्रोनाइज़ेशन प्रोसेस के बीच सिंक्रोनाइज़ेशन करने में हेल्प करता है।

Mutex mutex = fresh Mutex();

mutex.WaitOne();

// here we can define critical mutex section

mutex.ReleaseMutex();

Semaphore in Thread Synchronization.

यह आपको थ्रेड सिंक्रोनाइज़ेशन प्रोसेस में कई थ्रेड्स को एक साथ एक रिसोर्स के रूप में एक्सेस करने में हेल्प करता है।

Example of Semaphore Thread Synchronization.

यदि यहाँ सेमाफोर काउंट = 2 डिफाइन किया गया है, तो आप एक बार में सिर्फ़ 2 थ्रेड्स रिसोर्स ही एक्सेस और मैनेज कर सकते हैं।

AutoResetEvent in Thread Synchronization.

यह थ्रेड सिंक्रोनाइज़ेशन प्रोसेस में एक वेटिंग थ्रेड को अपने आप रिलीज़ कर देता है।

ManualResetEvent in Thread Synchronization.

यह थ्रेड सिंक्रोनाइज़ेशन प्रोसेस में मैन्युअली रीसेट होने तक सभी वेटिंग थ्रेड्स को रिलीज़ करता है।

Advantages of thread synchronization in C#.

  • यह थ्रेड प्रोग्राम में रेस कंडीशन को अवॉयड करता है.
  • यह थ्रेड में प्रोग्राम डेटा की कंसिस्टेंसी को मेन्टेन रखता है.
  • यह थ्रेड में यूज़ शेयर्ड रिसोर्स को सिक्योर होल्ड रखता है.
  • यह प्रोग्राम में थ्रेड सेफ़्टी को इम्प्रूव करता है.
  • यह प्रोग्राम में थ्रेड को फिक्स करता है, जिसमे आपको मौजूदा थ्रेड प्रोग्राम का बिहेवियर पहले से पता हो जाता है.

Disadvantages of thread synchronization in C#.

  • इससे मौजूदा प्रोग्राम की परफ़ॉर्मेंस ओवरहेड हो जाती है.
  • प्रोग्राम में मल्टीप्ल थ्रेड्स प्रोसेस के लिए बार-बार वेट कर करना पड़ता हैं.
  • किसी थ्रेड सिंक्रोनाइज़ेशन में कई डेडलॉक जनरेट हो सकते हैं
  • थ्रेड सिंक्रोनाइज़ेशन में एक काम्प्लेक्स और टाइम कन्सुमिंग डीबगिंग प्रोसेस होता है.

A real-life example of thread synchronization.

यहाँ माना की आपके पास एक ऐसा प्रिंटर आउटपुट डिवाइस है, जिसे लोकल एरिया नेटवर्क में एक साथ कई यूज़र शेयर करते हैं।

Here without a synchronization process.

  • यहाँ इसमें एक समय में एक साथ कई प्रिंट जॉब आपस में कनेक्टेड शेयर्ड प्रिंटर डिवाइस को रिसीव हो सकते सकते हैं

Here, with a synchronization process.

  • यहाँ सिंक्रोनाइज़ेशन प्रोसेस में यह एक समय में सिर्फ़ एक ही प्रिंट जॉब प्रिंटर का यूज़ कर अन्य रिक्वेस्ट को क्यू में वन बाय वन प्रोसेस करता है,
  • यह C# प्रोग्रामिंग में थ्रेड सिंक्रोनाइज़ेशन प्रोसेस के जैसा ही है।

Thread Synchronization Summary in C#.

C# प्रोग्रामिंग लैंग्वेज में थ्रेड सिंक्रोनाइज़ेशन का यूज़ शेयर्ड रिसोर्स को एक्सेस करने वाले कई प्रोग्राम थ्रेड्स को सिक्योर आर्डर में मैनेज और कण्ट्रोल करने में किया जाता है। यह थ्रेड सिंक्रोनाइज़ेशन प्रोसेस में रेस कंडीशन को अवॉयड करता है, और मौजूदा प्रोग्राम में कंट्रोल्ड थ्रेड एग्ज़िक्यूशन एक्टिविटीज टास्क की परमिशन प्रोवाइड कर प्रोग्राम में डेटा कंसिस्टेंसी को मेन्टेन करता है।

Leave a Reply