using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
public class SynchronizedList<T>
{
private readonly List<T> _list = new List<T>();
private readonly object _lockObject = new object();
// 添加元素
public void Add(T item)
{
lock (_lockObject)
{
_list.Add(item);
}
}
// 移除元素
public bool Remove(T item)
{
lock (_lockObject)
{
return _list.Remove(item);
}
}
// 获取元素数量
public int Count
{
get
{
lock (_lockObject)
{
return _list.Count;
}
}
}
// 索引器访问
public T this[int index]
{
get
{
lock (_lockObject)
{
return _list[index];
}
}
set
{
lock (_lockObject)
{
_list[index] = value;
}
}
}
// 查找元素
public bool Contains(T item)
{
lock (_lockObject)
{
return _list.Contains(item);
}
}
// 转换为数组(快照)
public T[] ToArray()
{
lock (_lockObject)
{
return _list.ToArray();
}
}
// 清空列表
public void Clear()
{
lock (_lockObject)
{
_list.Clear();
}
}
}
// 使用示例
class Program
{
static void Main()
{
var syncList = new SynchronizedList<int>();
// 多个线程同时操作列表
Parallel.For(0, 1000, i =>
{
syncList.Add(i);
});
Console.WriteLine($"列表元素数量: {syncList.Count}");
Console.WriteLine($"是否包含500: {syncList.Contains(500)}");
// 安全地遍历(通过快照)
var snapshot = syncList.ToArray();
foreach (var item in snapshot)
{
// 安全地处理每个元素
}
}
}