Stack ক্লাস নন-জেনেরিক এবং ডিফল্টভাবে থ্রেড-সেফ নয়। মাল্টি-থ্রেডেড এনভায়রনমেন্টে সেফলি অ্যাক্সেসের জন্য lock(stack.SyncRoot) ব্যবহার করতে হয়।
উদাহরণ ১: ইন্টিজার স্ট্যাক সিঙ্ক্রোনাইজ করা
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("Count of elements = " + stack.Count);
Console.WriteLine("Synchronize access...");
lock(stack.SyncRoot) {
foreach(Object ob in stack) {
Console.WriteLine(ob);
}
}
}
}
আউটপুট
Stack... 500 400 300 200 100 Count of elements = 5 Synchronize access... 500 400 300 200 100
উদাহরণ ২: স্ট্রিং স্ট্যাক সিঙ্ক্রোনাইজ করা
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("\nSynchronize access...");
lock(stack.SyncRoot) {
foreach(Object ob in stack) {
Console.WriteLine(ob);
}
}
}
}
আউটপুট
Stack... Justin Taylor Selena Katie Amy Tom Philips Tim Jacob Synchronize access... Justin Taylor Selena Katie Amy Tom Philips Tim Jacob
গুরুত্বপূর্ণ নোট
SyncRootপ্রপার্টি একটি অবজেক্ট রিটার্ন করে যা লকে জন্য ব্যবহার করা হয়।lockস্টেটমেন্ট নিশ্চিত করে যে একবারে শুধু এক থ্রেড কোড ব্লক এক্সিকিউট করতে পারে।- জেনেরিক
Stack<T>-এওSyncRootনেই; সেখানেlock(stack)ব্যবহার করা ভালো।