C#-এ প্রতিটি অ্যারে একটি SyncRoot প্রপার্টি 갖고 যা লকে জন্য ব্যবহার করা যায়। lock(array.SyncRoot) দিয়ে মাল্টি-থ্রেডেড পরিস্থিতিতে অ্যারে সেফলি অ্যাক্সেস করা যায়।
উদাহরণ ১: ইন্টিজার অ্যারে সিঙ্ক্রোনাইজ করা
using System;
public class Demo {
public static void Main() {
Array intArr = new int[] {5, 10, 15, 20, 25, 30, 35, 40};
Console.WriteLine("Integer array...");
foreach (int i in intArr)
Console.WriteLine(i);
Console.WriteLine("After applying lock on array...");
lock(intArr.SyncRoot) {
foreach (Object ob in intArr)
Console.WriteLine(ob);
}
}
}
আউটপুট
Integer array... 5 10 15 20 25 30 35 40 After applying lock on array... 5 10 15 20 25 30 35 40
উদাহরণ ২: স্ট্রিং অ্যারে সিঙ্ক্রোনাইজ করা
using System;
public class Demo {
public static void Main() {
Array strArr = new String[] {"Harry", "Tom", "Kevin", "Ryan", "Katie", "Amy"};
Console.WriteLine("String array...");
foreach (string i in strArr)
Console.WriteLine(i);
Console.WriteLine("After applying lock on array...");
lock(strArr.SyncRoot) {
foreach (Object ob in strArr)
Console.WriteLine(ob);
}
}
}
আউটপুট
String array... Harry Tom Kevin Ryan Katie Amy After applying lock on array... Harry Tom Kevin Ryan Katie Amy
মূল পয়েন্টস
- সব অ্যারে
System.Arrayথেকে উত্তরাধিকার পায়, যার মাঝেSyncRootপ্রপার্টি থাকে। lock(arr.SyncRoot)কোবল ইটারেশনের সময় নয়, রিড/রাইট যেকোনো অপারেশনের সময় ব্যবহার করা উচিত।- জেনেরিক কালেকশনগুলো (
List<T>,Dictionary<TKey,TValue>ইত্যাদি)SyncRootএক্সপোজ করে না; সেখানে সরাসরিlock(collection)ব্যবহার করুন।