我正在为 C# 开发一个并发字典实现,我想知道这个GetEnumerator()
实现是否实际上是(线程)安全的。
它没有做一个实际的快照,所以我想知道它是否会在以后对内部字典进行读/写时搞砸,或者它是否会暴露潜在的死锁,因为暴露的枚举IEnumerator
实际上会在锁内运行。
private readonly Dictionary<TKey, TValue> internalDictionary;
private SpinLock spinLock = new SpinLock();
IEnumerator IEnumerable.GetEnumerator()
{
IEnumerator enumerator;
bool lockTaken = false;
try
{
spinLock.TryEnter(ref lockTaken);
enumerator = (this.internalDictionary as IEnumerable).GetEnumerator();
}
finally
{
if (lockTaken)
{
spinLock.Exit(false);
}
}
return enumerator;
}