परिचय
Stack क्लास थ्रेड-सेफ नहीं है। मल्टी-थ्रेडेड वातावरण में सुरक्षित एक्सेस के लिए SyncRoot प्रॉपर्टी का उपयोग करके lock स्टेटमेंट के साथ सिंक्रनाइज़ेशन किया जाता है।
उदाहरण 1: पूर्णांक Stack पर सिंक्रनाइज़ेशन
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push(100);
stack.Push(200);
stack.Push(300);
stack.Push(400);
stack.Push(500);
Console.WriteLine("Stack...");
foreach(Object ob in stack) {
Console.WriteLine(ob);
}
Console.WriteLine("तत्वों की संख्या = " + stack.Count);
Console.WriteLine("सिंक्रनाइज़्ड एक्सेस...");
lock(stack.SyncRoot) {
foreach(Object ob in stack) {
Console.WriteLine(ob);
}
}
}
}
आउटपुट
Stack... 500 400 300 200 100 तत्वों की संख्या = 5 सिंक्रनाइज़्ड एक्सेस... 500 400 300 200 100
उदाहरण 2: स्ट्रिंग Stack पर सिंक्रनाइज़ेशन
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push("Jacob");
stack.Push("Tim");
stack.Push("Philips");
stack.Push("Tom");
stack.Push("Amy");
stack.Push("Katie");
stack.Push("Selena");
stack.Push("Taylor");
stack.Push("Justin");
Console.WriteLine("Stack...");
foreach(Object ob in stack) {
Console.WriteLine(ob);
}
Console.WriteLine("\nसिंक्रनाइज़्ड एक्सेस...");
lock(stack.SyncRoot) {
foreach(Object ob in stack) {
Console.WriteLine(ob);
}
}
}
}
आउटपुट
Stack... Justin Taylor Selena Katie Amy Tom Philips Tim Jacob सिंक्रनाइज़्ड एक्सेस... Justin Taylor Selena Katie Amy Tom Philips Tim Jacob
मुख्य बिंदु
SyncRootएक ऑब्जेक्ट लौटाता है जिसका उपयोग सिंक्रनाइज़ेशन के लिए किया जा सकता है।lock(SyncRoot)ब्लॉक के अंदर एन्यूमरेशन थ्रेड-सेफ होता है।- जेनेरिक
Stack<T>में भीSyncRootनहीं होता; मैन्युअल लॉकिंग आवश्यक है।