ArrayList.SyncRoot属性用于获取一个对象,该对象可用于同步对ArrayList的访问。 ArrayList表示可以单独索引的对象的有序集合。基本上,它是数组的替代方法。它还允许动态分配内存,添加,搜索和排序列表中的项目。
重要事项:
- 完成对象的同步,以便只有一个线程可以操纵ArrayList中的数据。
- 属性是提供读取,写入和计算私有数据字段的手段的类的成员。
- 同步代码不能直接在集合上执行,因此它必须在集合的SyncRoot上执行操作,以保证从其他对象派生的集合的正确操作。
- 检索此属性的值是O(1)操作。
Syntax: public virtual object SyncRoot { get; }
Property Value: An object that can be used to synchronize access to the ArrayList.
示例1:在此代码中,我们使用SyncRoot获得对名为arrlist的ArrayList的同步访问,这不是线程安全的过程,并且可能导致异常。因此,为了避免异常,我们锁定了集合。
// C# program to illustrate the
// use of SyncRoot property of
// the ArrayList
using System;
using System.Threading;
using System.Collections;
namespace sync_root {
class GFG {
// Main Method
static void Main(string[] args)
{
// Declaring an ArrayList
ArrayList arrlist = new ArrayList();
// Adding elements to ArrayList
arrlist.Add(1);
arrlist.Add(2);
arrlist.Add(3);
arrlist.Add(4);
arrlist.Add(5);
// Using the SyncRoot property
lock(arrlist.SyncRoot)
{
// foreach loop to display
// the elements in arrlist
foreach(Object i in arrlist)
Console.WriteLine(i);
}
}
}
}
输出:
1
2
3
4
5
范例2:
// C# program to illustrate the
// use of SyncRoot property of
// the ArrayList
using System;
using System.Threading;
using System.Collections;
namespace sync_root {
class GFG {
// Main Method
static void Main(string[] args)
{
// Declaring an ArrayList
ArrayList arrlist = new ArrayList();
// Adding elements to ArrayList
arrlist.Add("C");
arrlist.Add("C++");
arrlist.Add("Java");
arrlist.Add("C#");
arrlist.Add("HTML");
// Using the SyncRoot property
lock(arrlist.SyncRoot)
{
// foreach loop to display
// the elements in arrlist
foreach(Object i in arrlist)
Console.WriteLine(i);
}
}
}
}
输出:
C
C++
Java
C#
HTML
参考:
- https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.arraylist.syncroot?view=netframework-4.7.2