Check if StringDictionary is synchronized in C#

The StringDictionary class in C# provides the IsSynchronized property to check whether the dictionary is synchronized (thread-safe). By default, StringDictionary is not synchronized, meaning it's not safe for concurrent access from multiple threads without external synchronization.

Syntax

Following is the syntax to check if a StringDictionary is synchronized −

bool isSynchronized = stringDictionary.IsSynchronized;

Properties

  • IsSynchronized − Returns true if the StringDictionary is synchronized; otherwise, false.

  • SyncRoot − Gets an object that can be used to synchronize access to the StringDictionary.

Example 1: Basic Synchronization Check

using System;
using System.Collections;
using System.Collections.Specialized;

public class Demo {
   public static void Main() {
      StringDictionary strDict1 = new StringDictionary();
      strDict1.Add("A", "John");
      strDict1.Add("B", "Andy");
      strDict1.Add("C", "Tim");
      strDict1.Add("D", "Ryan");
      strDict1.Add("E", "Kevin");
      strDict1.Add("F", "Katie");
      strDict1.Add("G", "Brad");
      
      Console.WriteLine("StringDictionary1 elements...");
      foreach(DictionaryEntry de in strDict1) {
         Console.WriteLine(de.Key + " " + de.Value);
      }
      
      StringDictionary strDict2 = new StringDictionary();
      strDict2.Add("1", "A");
      strDict2.Add("2", "B");
      strDict2.Add("3", "C");
      strDict2.Add("4", "D");
      strDict2.Add("5", "E");
      
      Console.WriteLine("\nStringDictionary2 key-value pairs...");
      IEnumerator demoEnum = strDict2.GetEnumerator();
      DictionaryEntry d;
      while (demoEnum.MoveNext()) {
         d = (DictionaryEntry)demoEnum.Current;
         Console.WriteLine("Key = " + d.Key + ", Value = " + d.Value);
      }
      Console.WriteLine("Is the StringDictionary2 synchronized? = " + strDict2.IsSynchronized);
   }
}

The output of the above code is −

StringDictionary1 elements...
a John
b Andy
c Tim
d Ryan
e Kevin
f Katie
g Brad

StringDictionary2 key-value pairs...
Key = 1, Value = A
Key = 2, Value = B
Key = 3, Value = C
Key = 4, Value = D
Key = 5, Value = E
Is the StringDictionary2 synchronized? = False

Example 2: Checking Synchronization with SyncRoot

using System;
using System.Collections;
using System.Collections.Specialized;

public class Demo {
   public static void Main() {
      StringDictionary strDict = new StringDictionary();
      strDict.Add("One", "Laptop");
      strDict.Add("Two", "Desktop");
      strDict.Add("Three", "Earphone");
      strDict.Add("Four", "Speaker");
      strDict.Add("Five", "HardDisk");
      strDict.Add("Six", "SSD");
      strDict.Add("Seven", "Monitor");
      
      Console.WriteLine("StringDictionary key-value pairs...");
      IEnumerator demoEnum = strDict.GetEnumerator();
      DictionaryEntry d;
      while (demoEnum.MoveNext()) {
         d = (DictionaryEntry)demoEnum.Current;
         Console.WriteLine("Key = " + d.Key + ", Value = " + d.Value);
      }
      
      Console.WriteLine("Is StringDictionary synchronized? = " + strDict.IsSynchronized);
      Console.WriteLine("SyncRoot available: " + (strDict.SyncRoot != null));
   }
}

The output of the above code is −

StringDictionary key-value pairs...
Key = five, Value = HardDisk
Key = one, Value = Laptop
Key = four, Value = Speaker
Key = three, Value = Earphone
Key = seven, Value = Monitor
Key = six, Value = SSD
Key = two, Value = Desktop
Is StringDictionary synchronized? = False
SyncRoot available: True

Thread Safety Considerations

Since StringDictionary is not synchronized by default, you need to use external synchronization mechanisms when accessing it from multiple threads −

using System;
using System.Collections.Specialized;

public class Demo {
   public static void Main() {
      StringDictionary strDict = new StringDictionary();
      strDict.Add("key1", "value1");
      strDict.Add("key2", "value2");
      
      // Thread-safe access using lock
      lock(strDict.SyncRoot) {
         Console.WriteLine("Thread-safe access:");
         Console.WriteLine("Count: " + strDict.Count);
         Console.WriteLine("Is synchronized: " + strDict.IsSynchronized);
      }
   }
}

The output of the above code is −

Thread-safe access:
Count: 2
Is synchronized: False

Conclusion

The IsSynchronized property of StringDictionary always returns false as it is not thread-safe by default. For multi-threaded applications, use the SyncRoot property with lock statements or consider using thread-safe alternatives like ConcurrentDictionary<string, string>.

Updated on: 2026-03-17T07:04:36+05:30

165 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements