从不同的线程访问内部字段

时间:2014-02-11 23:50:47

标签: c# multithreading dictionary

我在线程上下文中有一个设计问题。 假设我的模型包含3个A,B和C类。

我持有对A类实例的引用。 A类创建多个B类。 这些B类中的每一个都持有C类的引用并启动后台工作程序来处理处理网络消息的C类。

这是个主意:

Class A
{
   B refB;
}

Class B
{
  public object MyFieldCopy {get;set;}
  public C refC;

  public void ExecuteInOtherThread()
  {
     while(true) 
     {
        // do things with refC, modifying MyField 
     }
   }
}

Class C
{
  public readonly Dictionary<int, HashSet<int>> MyField; //init in constructor
}

我实际上使用的是属性,而不是对象类型,只是试图提高阅读清晰度

我希望能够从A类访问MyField,而不会阻止从B类工作的Thread。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果MyField始终是字典,您可以使用ConcurrentDictionary执行此操作。 看看这里:http://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx

无论你做什么,如果两个或多个线程需要访问相同的字段/内存,他们可以一次访问它,所以你应该锁定。如果您使用ConcurrentDictionary来处理它。