C# Thread Synchronization

Introduction to C# Thread Synchronization

Thread Synchronization एक mechanism है जिसके द्वारा programmers यह सुनिश्चित करते है की किसी resource को एक बार में एक से अधिक threads access ना कर सके।

जब आप multithreading implement करते है तो कई threads एक साथ execute होती है और available resources जैसे की memory, CPU, network connection, files आदि को share करती है। इसे multithreading में resource sharing कहा जाता है।

हालाँकि resource sharing बहुत उपयोगी feature है। लेकिन कई बार एक programmer के रूप में आपके सामने ऐसी situations भी आ जाती है जब आप चाहते है की कोई resource एक बार में सिर्फ एक ही thread द्वारा प्रयोग किया जाए।

उदाहरण के लिए यदि कई threads एक साथ एक file को access और modify करने का प्रयास करती है तो उस situation में उस file का data corrupt होना पूर्णतः संभव है। ऐसी situation में यह आवश्यक है की threads में आपस में coordination हो।

यदि ऐसा नहीं होता है तो कई threads एक समय पर एक ही resource को access करेगी जिससे conflict होने की सम्भावना बढ़ जाती है। इससे data corrupt हो सकता है और application की performance पर भी इसका नकारात्मक असर पड़ सकता है।

ऐसी ही situations को handle करने के लिए C# आपको thread synchronization mechanism provide करती है। Thread synchronization द्वारा आप उस code को lock कर देते है जो resource को access और modify करने के लिए execute किया जाता है। इससे उस code को एक बार में एक ही thread execute कर पाती है।

C# lock Statement

C# में thread synchronization lock statement द्वारा implement किया जाता है। Lock statement में आप वह code लिखते है जो एक बार में एक ही thread द्वारा execute किया जाना चाहिए।

Lock statement में लिखा गया code दूसरी threads द्वारा interrupt नहीं किया जा सकता है जब तक की current thread का execution complete नहीं हो जाता है। दूसरी threads तब तक के लिए wait करती है।

Lock statement को lock keyword द्वारा define किया जाता है। इसका general syntax निचे दिया जा रहा है।

lock(object-to-synchronize)
{
      //code here…
}

जैसा की आप ऊपर दिए गए syntax में देख सकते है lock statement में argument के रूप में एक object pass किया जाता है। यह वह object होता है जिस पर lock statement द्वारा lock implement किया जाता है। यह उस class का object होता है जो उस code को represent करती है जिसे multiple threads execute करने का प्रयास कर रही है।

lock statement के curly brackets में वह code define किया जाता है जो multiple threads द्वारा execute किया जाएगा।

Example of C# Thread Synchronization

C# में thread synchronization implement करना निचे उदाहरण द्वारा समझाया जा रहा है।

using System;
using System.Threading;

class seriesPrint
{
     public void sPrint()
     {
          lock(this)
          {
                 for(int i=1;i<=10;i++)
                 {
                       Thread.Sleep(100);
                       Console.WriteLine(i);
                 }
          }
     }
}

class ThreadSynDemo
{
      static void Main(string[] args)
      {
             seriesPrint obj = new seriesPrint();
             Thread t1 = new Thread(new ThreadStart(obj.sPrint));
             Thread t2 = new Thread(new ThreadStart(obj.sPrint));
             t1.Start();
             t2.Start();
      }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10