How to lock a dictionary?

前端 未结 3 1003
情歌与酒
情歌与酒 2021-01-22 03:34

I have a static dictionary in a multi thread application. class A Reads the dictionary and class B Removes from it. I want to lock dictionary when removing from it or reading fr

3条回答
  •  既然无缘
    2021-01-22 04:13

    You could use a ConcurrentDictionary as pwas suggests. If you want to synchronise the dictionary that you have, you use the lock keyword.

    You should generally use a separate object for the synchronising, and don't expose that object outside your scope. That ensures that code outside the block can't use the same object for locks and cause conflicts.

    public static Dictionary DicThreads = new Dictionary();
    private static object sync = new Object();
    
    Class A() {
    
      private void MethodA() {
        lock (sync) {
          if (DicThreads.ContainsKey(key)) {
            if (DicThreads[key] == null || DicThreads[key].ThreadState == ThreadState.Stopped) {
              //--- Do something
            }
          }
        }
      }
    
    }
    
    class B {
    
      private void MethodB() {
        lock (sync) {
          DicThreads.Remove(key)
        }
     }
    
    }
    

提交回复
热议问题