在 C# 中,SyncRoot
是 ICollection
接口中的一个属性,主要用于提供一个对象,该对象可以用作同步的根,以实现对集合的线程安全访问。这个属性通常在多线程环境中使用,帮助开发者管理对集合的并发访问。
SyncRoot
属性的详细信息
- 返回类型:
object
- 含义: 返回一个用于同步的对象。可以使用该对象在访问集合时进行锁定,以确保线程安全。
使用场景
在多线程环境中,如果多个线程可能同时访问集合并且至少有一个线程会对集合进行修改,那么需要确保对集合的访问是线程安全的。SyncRoot
提供了一个可以用来锁定的对象,从而避免数据竞争和潜在的异常。
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList myArrayList = new ArrayList();
object syncRoot = myArrayList.SyncRoot; // 获取 SyncRoot 对象
// 模拟多个线程访问集合
System.Threading.Thread thread1 = new System.Threading.Thread(() =>
{
lock (syncRoot) // 使用 SyncRoot 进行锁定
{
for (int i = 0; i < 5; i++)
{
myArrayList.Add(i);
Console.WriteLine("Thread 1 added: " + i);
}
}
});
System.Threading.Thread thread2 = new System.Threading.Thread(() =>
{
lock (syncRoot) // 使用 SyncRoot 进行锁定
{
for (int i = 5; i < 10; i++)
{
myArrayList.Add(i);
Console.WriteLine("Thread 2 added: " + i);
}
}
});
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
Console.WriteLine("Final count: " + myArrayList.Count); // 输出: Final count: 10
}
}