我在线程上下文中有一个设计问题。 假设我的模型包含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。
非常感谢。
答案 0 :(得分:1)
如果MyField
始终是字典,您可以使用ConcurrentDictionary
执行此操作。
看看这里:http://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx
无论你做什么,如果两个或多个线程需要访问相同的字段/内存,他们可以一次访问它,所以你应该锁定。如果您使用ConcurrentDictionary
来处理它。