ICollection接口SyncRoot

C#中SyncRoot属性实现线程安全访问

在 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
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值