কম্পিউটার টিউটোরিয়াল

C#-এ Stack-এ সিঙ্ক্রোনাইজড অ্যাক্সেস পাওয়া

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) ব্যবহার করা ভালো।
  1. C#-এ টাপলের ৫ম উপাদান পান

  2. C#-এ Stack-এ উপাদানের সংখ্যা পান

  3. C#-এ Stack ক্লাস (Stack Class)

  4. ম্যাক ডকে সাম্প্রতিক ফাইল দ্রুত খোলার উপায়