Stack.IsSynchronized Property in C#

The Stack.IsSynchronized property in C# is used to get a value indicating whether access to the Stack is synchronized (thread-safe). This property returns false for the standard Stack class, as it is not thread-safe by default.

Syntax

Following is the syntax of the IsSynchronized property −

public virtual bool IsSynchronized { get; }

Return Value

This property returns true if the Stack is synchronized (thread-safe); otherwise, it returns false. For the default Stack implementation, this property always returns false.

Understanding Thread Safety in Stack

The standard Stack class is not thread-safe, meaning multiple threads cannot safely access the same Stack instance simultaneously. To create a synchronized (thread-safe) version, you can use the Stack.Synchronized() method.

Stack Synchronization Regular Stack new Stack() IsSynchronized: false Not thread-safe Synchronized Stack Stack.Synchronized() IsSynchronized: true Thread-safe Synchronized() Use Stack.Synchronized() for thread-safe operations

Example - Regular Stack

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      Stack stack = new Stack();
      stack.Push("Inspiron");
      stack.Push("Alienware");
      stack.Push("Projectors");
      stack.Push("Monitors");
      stack.Push("XPS");
      
      Console.WriteLine("Stack elements...");
      foreach(string val in stack) {
         Console.WriteLine(val);
      }
      
      Console.WriteLine("Count of elements = " + stack.Count);
      Console.WriteLine("Is the Stack synchronized? = " + stack.IsSynchronized);
   }
}

The output of the above code is −

Stack elements...
XPS
Monitors
Projectors
Alienware
Inspiron
Count of elements = 5
Is the Stack synchronized? = False

Using Stack.Synchronized() Method

Example - Creating a Synchronized Stack

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      Stack stack = new Stack();
      stack.Push(150);
      stack.Push(300);
      stack.Push(500);
      stack.Push(750);
      
      Console.WriteLine("Original Stack - IsSynchronized: " + stack.IsSynchronized);
      
      // Create a synchronized wrapper
      Stack syncStack = Stack.Synchronized(stack);
      Console.WriteLine("Synchronized Stack - IsSynchronized: " + syncStack.IsSynchronized);
      
      Console.WriteLine("\nSynchronized Stack elements...");
      foreach(int val in syncStack) {
         Console.WriteLine(val);
      }
      Console.WriteLine("Count of elements = " + syncStack.Count);
   }
}

The output of the above code is −

Original Stack - IsSynchronized: False
Synchronized Stack - IsSynchronized: True

Synchronized Stack elements...
750
500
300
150
Count of elements = 4

Key Points

  • The default Stack class returns false for IsSynchronized property.

  • Use Stack.Synchronized() method to create a thread-safe wrapper around an existing Stack.

  • Synchronized stacks are essential when multiple threads need to access the same Stack instance.

  • The synchronized wrapper provides thread-safe access to all Stack operations.

Conclusion

The IsSynchronized property indicates whether a Stack is thread-safe. While the default Stack returns false, you can create a synchronized version using Stack.Synchronized() for multi-threaded scenarios where thread safety is required.

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

140 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements