ListDictionary.SyncRoot属性用于获取一个对象,该对象可用于同步对ListDictionary的访问。 ListDictionary是一个专门的集合。它位于System.Collections.Specialized命名空间下。此类型表示非通用词典类型。它通过链表实现。
Syntax: public virtual object SyncRoot { get; }
Property Value: An object which can be used to synchronize access to the ListDictionary.
重要事项:
- 完成对象的同步,以便只有一个线程可以操纵ListDictionary中的数据。
- 属性是提供读取,写入和计算私有数据字段的手段的类的成员。
- 同步代码不能直接在集合上执行,因此它必须在集合的SyncRoot上执行操作,以保证从其他对象派生的集合的正确操作。
- 检索此属性的值是O(1)操作。
下面的程序说明了上面讨论的属性的用法:
示例1:在此代码中,我们使用SyncRoot获得对名为listdict的ListDictionary的同步访问,这不是线程安全的过程,并且可能导致异常。因此,为避免异常,我们在枚举期间锁定了集合。
// C# program to illustrate the
// use of SyncRoot property of
// the ListDictionary class
using System;
using System.Threading;
using System.Collections;
using System.Collections.Specialized;
namespace sync_root {
class GFG {
// Main Method
static void Main(string[] args)
{
// Declaring an ListDictionary
ListDictionary listdict = new ListDictionary();
// Adding elements to ListDictionary
listdict.Add("10", "JQUERY");
listdict.Add("20", "HTML");
listdict.Add("30", "CSS");
listdict.Add("40", "C");
listdict.Add("50", "C++");
listdict.Add("60", "C#");
// Using the SyncRoot property
lock(listdict.SyncRoot)
{
// foreach loop to display
// the elements in listdict
foreach(DictionaryEntry i in listdict)
Console.WriteLine(i.Key + " ---- " + i.Value);
}
}
}
}
输出:
10 ---- JQUERY
20 ---- HTML
30 ---- CSS
40 ---- C
50 ---- C++
60 ---- C#
范例2:
// C# program to illustrate the
// use of SyncRoot property of
// the ListDictionary class
using System;
using System.Threading;
using System.Collections;
using System.Collections.Specialized;
namespace sync_root {
class GFG {
// Main Method
static void Main(string[] args)
{
// Declaring an ListDictionary
ListDictionary listdict = new ListDictionary();
// Adding elements to ListDictionary
listdict.Add("1", "Ram");
listdict.Add("2", "Shyam");
listdict.Add("3", "Mohan");
listdict.Add("4", "Sohan");
listdict.Add("5", "Rohan");
// Using the SyncRoot property
lock(listdict.SyncRoot)
{
// foreach loop to display
// the elements in listdict
foreach(DictionaryEntry i in listdict)
Console.WriteLine(i.Key + " ----> " + i.Value);
}
}
}
}
输出:
1 ----> Ram
2 ----> Shyam
3 ----> Mohan
4 ----> Sohan
5 ----> Rohan
参考:
- https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.specialized.listdictionary.syncroot?view=netframework-4.7.2