我正在爲C#編寫一個併發字典實現,我想知道這個GetEnumerator()
實現實際上是(線程)安全。爲併發字典暴露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;
}
「snapsnot」我希望這是一個錯字... – antonijn
是的,但他們明確建議你不要編輯單字母拼寫錯誤。 – antonijn
這裏沒有具體的問題或疑問...... – asawyer