我有一個C#中的情況,我有一個簡單類型的列表。該列表可以被多個線程訪問:可以添加或刪除條目,並且可以檢查條目的存在。我已經把這個列表封裝在一個對象中,這個對象只暴露了這三個操作。C#併發列表問題
我有幾個案例需要處理(與我剛剛提到的方法不完全相同)。
1.線程可以檢查是否存在條目。 (簡單)
2.線程可以檢查條目是否存在,如果條目不存在,則添加它。
3.線程需要檢查一個條目是否存在,如果存在,請等到刪除。
4. 2和3的組合,其中一個線程檢查條目是否存在,如果它存在,它必須等到它被刪除後才能添加它自己。
整個想法是,一個條目的存在意味着一個鎖。如果存在條目,則其標識的對象不能更改,並且代碼無法繼續進行,因爲它正在其他地方進行修改。
這些看起來像是簡單的新手,但我在併發問題上提醒自己,這讓我有點偏執,而且我也不熟悉C#的併發機制。
什麼是最好的處理方法?我完全沒有?應該檢查並添加(測試和設置?)合併成第四個原子操作?我是否只是將鎖塊添加到列表訪問的方法中?
另外,是否有可能單元測試這種事情(不是簡單的操作,併發情況)?
+1,我來到了一個類似的解決方案,但HashSet中,使之更有效率。 Monitor類的很好的演示,使用嵌套鎖等。只有當一個項目被刪除時,問題可能是'踩踏'。 – 2009-07-02 17:23:59