📌  相关文章
📜  C#|为ArrayList创建一个同步的(线程安全的)包装器(1)

📅  最后修改于: 2023-12-03 15:14:28.172000             🧑  作者: Mango

C# | ArrayList 同步包装器

当多个线程需要同时访问同一个 ArrayList 时,为确保数据一致性可以使用同步包装器来保证线程安全性。本文将介绍如何使用同步包装器创建一个线程安全的 ArrayList。

ArrayList类

ArrayList是 C# 中的一个动态数组类,它可以在运行时自动扩展大小。它对于需要执行添加或删除元素操作的数据集合特别有用。下面是创建一个 ArrayList 并添加元素的示例:

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        ArrayList list = new ArrayList();
        list.Add("one");
        list.Add("two");
        list.Add("three");

        foreach (object obj in list)
        {
            Console.WriteLine(obj);
        }
    }
}

运行输出:

one
two
three
同步包装器

可以使用 ArrayList.Synchronized() 方法来创建一个同步包装器。同步包装器返回线程安全的 ICollection 接口,可以用于在多个线程之间共享数据集合。

下面是创建一个同步的 ArrayList 示例:

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        ArrayList list = new ArrayList();
        list.Add("one");
        list.Add("two");
        list.Add("three");

        IList synced = ArrayList.Synchronized(list);

        foreach (object obj in synced)
        {
            Console.WriteLine(obj);
        }
    }
}

运行输出:

one
two
three

注意在迭代 ArrayList 时需要锁定,如果未锁定,则会出现集合被修改的异常。

总结

通过使用同步包装器,可以确保多个线程使用同一个 ArrayList 时,数据的正确性和一致性。需要注意的是,在同时访问 ArrayList 时,必须对其进行锁定以避免异常。