C# में Hashtable सिंक्रनाइज़्ड (थ्रेड-सेफ) है या नहीं यह जांचने के लिए, हम IsSynchronized प्रॉपर्टी का उपयोग करते हैं। एक गैर-सिंक्रनाइज़्ड Hashtable को थ्रेड-सेफ बनाने के लिए, हम Hashtable.Synchronized() स्टैटिक मेथड का उपयोग करके एक सिंक्रनाइज़्ड रैपर बना सकते हैं। Hashtable System.Collections नेमस्पेस में स्थित एक गैर-जेनेरिक कुंजी-मान संग्रह है।
उदाहरण 1: Synchronized() रैपर के साथ सिंक्रनाइज़ेशन
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Hashtable hash = new Hashtable();
hash.Add("One", "Katie");
hash.Add("Two", "John");
hash.Add("Three", "Barry");
hash.Add("Four", "");
hash.Add("Five", "Harry");
hash.Add("Six", "F");
hash.Add("Seven", "Tom");
hash.Add("Eight", "Andy");
hash.Add("Nine", "I");
hash.Add("Ten", "Tim");
Console.WriteLine("Hashtable कुंजी और मान जोड़े...");
foreach (DictionaryEntry entry in hash)
{
Console.WriteLine("{0} और {1} ", entry.Key, entry.Value);
}
Console.WriteLine("क्या Hashtable का आकार निश्चित है? = " + hash.IsFixedSize);
Console.WriteLine("क्या Hashtable केवल-पढ़ने योग्य है? = " + hash.IsReadOnly);
Hashtable hash2 = Hashtable.Synchronized(hash);
Console.WriteLine("क्या Hash सिंक्रनाइज़्ड है? = " + hash2.IsSynchronized);
}
}
आउटपुट
Hashtable कुंजी और मान जोड़े... One और Katie Ten और Tim Five और Harry Three और Barry Seven और Tom Two और John Four और Eight और Andy Nine और I Six और F क्या Hashtable का आकार निश्चित है? = False क्या Hashtable केवल-पढ़ने योग्य है? = False क्या Hash सिंक्रनाइज़्ड है? = True
उदाहरण 2: गैर-सिंक्रनाइज़्ड Hashtable (डिफ़ॉल्ट)
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Hashtable hash = new Hashtable();
hash.Add("One", 1);
hash.Add("Two", 2);
hash.Add("Three", 2);
hash.Add("Four", 4);
hash.Add("Five", 5);
hash.Add("Six", 6);
hash.Add("Seven", 7);
Console.WriteLine("Hashtable कुंजी और मान जोड़े...");
foreach (DictionaryEntry entry in hash)
{
Console.WriteLine("{0} और {1} ", entry.Key, entry.Value);
}
Console.WriteLine("क्या Hashtable का आकार निश्चित है? = " + hash.IsFixedSize);
Console.WriteLine("क्या Hashtable केवल-पढ़ने योग्य है? = " + hash.IsReadOnly);
Console.WriteLine("क्या Hash सिंक्रनाइज़्ड है? = " + hash.IsSynchronized);
}
}
आउटपुट
Hashtable कुंजी और मान जोड़े... One और 1 Five और 5 Three और 2 Seven और 7 Two और 2 Four और 4 Six और 6 क्या Hashtable का आकार निश्चित है? = False क्या Hashtable केवल-पढ़ने योग्य है? = False क्या Hash सिंक्रनाइज़्ड है? = False
मुख्य बिंदु:
- डिफ़ॉल्ट रूप से
Hashtableसिंक्रनाइज़्ड नहीं होता (IsSynchronized = False) Hashtable.Synchronized()एक थ्रेड-सेफ रैपर लौटाता है- सिंक्रनाइज़्ड रैपर पर सभी ऑपरेशंस थ्रेड-सेफ होते हैं
- एन्यूमरेशन के लिए मैन्युअल लॉकिंग की आवश्यकता होती है (
lockस्टेटमेंट) - आधुनिक C# में
ConcurrentDictionary<TKey, TValue>को प्राथमिकता दी जाती है