C# List接口源码分析 线程安全

   List 不属于线程安全数据集合,多线程会有不可控的情况,发生 

using System;
using System.Collections;
using System.Collections.Generic;

// Token: 0x02000BAA RID: 2986
[Serializable]
internal class SynchronizedList : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable
{
	// Token: 0x06006DDB RID: 28123 RVA: 0x0017A630 File Offset: 0x00178830
	internal SynchronizedList(List<T> list)
	{
		this._list = list;
		this._root = ((ICollection)list).SyncRoot;
	}

	// Token: 0x170012F5 RID: 4853
	// (get) Token: 0x06006DDC RID: 28124 RVA: 0x0017A64C File Offset: 0x0017884C
	public int Count
	{
		get
		{
			object root = this._root;
			int count;
			lock (root)
			{
				count = this._list.Count;
			}
			return count;
		}
	}

	// Token: 0x170012F6 RID: 4854
	// (get) Token: 0x06006DDD RID: 28125 RVA: 0x0017A694 File Offset: 0x00178894
	public bool IsReadOnly
	{
		get
		{
			return ((ICollection<T>)this._list).IsReadOnly;
		}
	}

	// Token: 0x06006DDE RID: 28126 RVA: 0x0017A6A4 File Offset: 0x001788A4
	public void Add(T item)
	{
		object root = this._root;
		lock (root)
		{
			this._list.Add(item);
		}
	}

	// Token: 0x06006DDF RID: 28127 RVA: 0x0017A6EC File Offset: 0x001788EC
	public void Clear()
	{
		object root = this._root;
		lock (root)
		{
			this._list.Clear();
		}
	}

	// Token: 0x06006DE0 RID: 28128 RVA: 0x0017A734 File Offset: 0x00178934
	public bool Contains(T item)
	{
		object root = this._root;
		bool result;
		lock (root)
		{
			result = this._list.Contains(item);
		}
		return result;
	}

	// Token: 0x06006DE1 RID: 28129 RVA: 0x0017A77C File Offset: 0x0017897C
	public void CopyTo(T[] array, int arrayIndex)
	{
		object root = this._root;
		lock (root)
		{
			this._list.CopyTo(array, arrayIndex);
		}
	}

	// Token: 0x06006DE2 RID: 28130 RVA: 0x0017A7C4 File Offset: 0x001789C4
	public bool Remove(T item)
	{
		object root = this._root;
		bool result;
		lock (root)
		{
			result = this._list.Remove(item);
		}
		return result;
	}

	// Token: 0x06006DE3 RID: 28131 RVA: 0x0017A80C File Offset: 0x00178A0C
	IEnumerator IEnumerable.GetEnumerator()
	{
		object root = this._root;
		IEnumerator result;
		lock (root)
		{
			result = this._list.GetEnumerator();
		}
		return result;
	}

	// Token: 0x06006DE4 RID: 28132 RVA: 0x0017A858 File Offset: 0x00178A58
	IEnumerator<T> IEnumerable<T>.GetEnumerator()
	{
		object root = this._root;
		IEnumerator<T> enumerator;
		lock (root)
		{
			enumerator = ((IEnumerable<T>)this._list).GetEnumerator();
		}
		return enumerator;
	}

	// Token: 0x170012F7 RID: 4855
	public T this[int index]
	{
		get
		{
			object root = this._root;
			T result;
			lock (root)
			{
				result = this._list[index];
			}
			return result;
		}
		set
		{
			object root = this._root;
			lock (root)
			{
				this._list[index] = value;
			}
		}
	}

	// Token: 0x06006DE7 RID: 28135 RVA: 0x0017A930 File Offset: 0x00178B30
	public int IndexOf(T item)
	{
		object root = this._root;
		int result;
		lock (root)
		{
			result = this._list.IndexOf(item);
		}
		return result;
	}

	// Token: 0x06006DE8 RID: 28136 RVA: 0x0017A978 File Offset: 0x00178B78
	public void Insert(int index, T item)
	{
		object root = this._root;
		lock (root)
		{
			this._list.Insert(index, item);
		}
	}

	// Token: 0x06006DE9 RID: 28137 RVA: 0x0017A9C0 File Offset: 0x00178BC0
	public void RemoveAt(int index)
	{
		object root = this._root;
		lock (root)
		{
			this._list.RemoveAt(index);
		}
	}

	// Token: 0x040034F9 RID: 13561
	private List<T> _list;

	// Token: 0x040034FA RID: 13562
	private object _root;
}

相同的原理其他的数据集合都有安全版本 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值