C# | Creating a synchronized (thread-safe) wrapper for the Hashtable

Hashtable.Synchronized(Hashtable) Method is used to return a synchronized (thread-safe) wrapper for the Hashtable.

Syntax:

public static System.Collections.Hashtable Synchronized (System.Collections.Hashtable table);



Here table is the Hashtable which is to be synchronized.

Return Value: This method returns a synchronized (thread-safe) wrapper for the Hashtable.

Exception: This method will throw the ArgumentNullException if the table is null.

Below programs illustrate the use of above-discussed method:

Example 1:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to get a synchronized (thread-
// safe) wrapper for the Hashtable
using System;
using System.Collections;
  
class GFG {
  
    // Main method
    static void Main(string[] args)
    {
  
        // create and initalize Hash table
        // using Add() method
        Hashtable has1 = new Hashtable();
        has1.Add("1", "Welcome");
        has1.Add("2", "to");
        has1.Add("3", "geeks");
        has1.Add("4", "for");
        has1.Add("5", "geeks");
  
        // Creating a synchronized packing
        // around the Hashtable
        Hashtable has2 = Hashtable.Synchronized(has1);
  
        // --------- Using IsSynchronized Property
  
        // print the status of both Hashtables
        Console.WriteLine("has1 Hashtable is {0}.",
            has1.IsSynchronized ? "synchronized"
                              "not synchronized");
  
        Console.WriteLine("has2 Hashtable is {0}.",
             has2.IsSynchronized ? "synchronized" :
                               "not synchronized");
    }
}

chevron_right


Output:

has1 Hashtable is not synchronized.
has2 Hashtable is synchronized.

Example 2:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# code to get a synchronized (thread-
// safe) wrapper for the Hashtable
using System;
using System.Collections;
  
class GFG {
  
    // Main method
    static void Main(string[] args)
    {
  
        // create and initalize Hash table
        // there will be no elements
        Hashtable has1 = new Hashtable();
  
        // it will give runtime error as
        // table parameter can't be null
        Hashtable has2 = Hashtable.Synchronized(null);
    }
}

chevron_right


Runtime Error:

Unhandled Exception:
System.ArgumentNullException: Value cannot be null.
Parameter name: table

Note:

  • This method is a thread-safe for multiple readers and writers. Furthermore, the synchronized wrapper ensures that there is only one writer writing at a time.
  • Enumerating through a collection is intrinsically not a thread-safe process. Other threads can still modify the collection, which causes the enumerator to throw an exception even when a collection is synchronized.
  • To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.
  • This method is an O(1) operation.

Reference:



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.