SynchronizedList线程安全列表

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)
        {
            // 安全地处理每个元素
        }
    }
}

 

posted @ 2025-11-24 15:19  家煜宝宝  阅读(6)  评论(0)    收藏  举报