【发布时间】:2016-04-20 15:46:05
【问题描述】:
我正在编写一些简单的图形管理器,我决定使用工厂模式为我的图形创建边。我才刚刚开始学习设计模式和线程。
我创建了工厂,返回一些对象(边),创建方法,代码:
public Edge<T> CreateEdge(Vertex<T> firstVertex, Vertex<T> secondVertex)
{
var edge = new Edge<T>(firstVertex, secondVertex, _nextIndex);
_nextIndex++;
return edge;
}
这是我的问题。如果该工厂将由多个线程共享,那么返回多个具有相同索引的边是可能的。
这个问题的最佳解决方案是什么?
我应该使用锁还是一些互斥锁?
或者是我设计不好的类的错,使用工厂?
编辑#1: 改变IncreaseIndex() -> _nextIndex++;写的时候出错。
【问题讨论】:
-
NextIndex 是一个属性吗?这就是我根据名称假设的,但只是想确定
-
是的,我输入错误。已更正
-
您可能想退后一步,考虑您是否真的希望多个线程同时改变图形。使用线程共享可变状态会变得非常棘手,非常快。可能还有其他方法可以构建您的问题,以便您可以并行处理隔离良好的数据块,而线程之间的同步最少。
标签: c# .net multithreading design-patterns factory-pattern