查看: 950|回复: 2

求助,关于线程同步的问题,

[复制链接]

该用户从未签到

发表于 2011-7-11 21:26:37 | 显示全部楼层 |阅读模式
本帖最后由 zealotsparc 于 2011-7-11 21:28 编辑

要实现的是飞机飞行轨迹的显示。
因此,于是设计了如下类
  1. class TrackDrawable : public osg::Drawable
  2. {

  3.     //...
  4. public:
  5.     virtual void drawImplentation(osg::RenderInfo& renderInfo) const
  6.     {
  7.         //..
  8.         // 使用_arPoints中的数据绘制轨迹
  9.     }
  10.     //...
  11.     void pushPlanePositionAndAttitude(osg::Vec3 position,osg::Vec3 attitude)
  12.     {
  13.         // 当飞机位置姿态更新时向_arPoints中添加新的数据
  14.     }

  15. protected:
  16.   osg::ref_ptr<osg::Vec3Array> _arPoints;
  17. }
复制代码

其中,pushPlanePositionAndAttitude是在飞行解算线程中执行的。由于pushPlanePositionAndAttitude和drawImplentation都需要访问_arPoints,在某些情况下如果没有进行线程同步将会出现错误,那么如何在pushPlanePositionAndAttitude中进行线程同步以避免pushPlanePositionAndAttitude和drawImplentation同时访问_arPoints呢?

该用户从未签到

发表于 2011-7-12 00:18:59 | 显示全部楼层
不需要,你这里并不涉及同时写的问题,如果你非要线程处理的话,用一个Mutex独占等待吧

该用户从未签到

发表于 2011-7-12 08:30:53 | 显示全部楼层
同时读+写也是存在问题的,尤其是写操作当中如果要删除arPoints的元素的话,读操作很可能崩溃。这里用同一个mutex来加锁就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表