首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

关于对象设计的有关问题

2012-03-02 
关于对象设计的问题我设计聚合对象并使用观察者模式时,碰到这么一个问题,类A聚合类B,而且1对多关系,我在类

关于对象设计的问题
我设计聚合对象并使用观察者模式时,碰到这么一个问题,类A聚合类B,而且1对多关系,我在类A中有方法AddNew(B),添加B到链表里,有方法DelB(B),把B重链表中删除,使用时其他方法遍历链表查找一个B实例; 但是在多线程中,我可能在一个线程遍历链表的同时,另一个线程DelB(B),删除了一个B,从而遍历报索引例外. 不知道是设计问题,还是怎么解决呢?

[解决办法]
多线程是需要对象进行同步和互斥的。一个线程操作时,进入管道,其它线程不能操作。

这个从具体层面来讲并不是设计问题,而是具体编程的问题。

你可以看看实时应用系统设计的书,里面有很多关于这样的内容。
[解决办法]
1,这本身是一个矛盾,如果按你原有设计,必须对add,del方法中进行同步处理。比如临界区,信号量等
但是这会牺牲效率。对于较少的增,删除动作的话,这是一个比较好的方法。
2.如果你的增删除比较频繁,那么以上方法就不很好了。你应该用状态来表示是否删除。
多线中只需要控制状态量就可以了,大大提高效率,当然也需要做好同步。

热点排行