在基于openGL渲染器的游戏环境中交谈:
假设有两个线程:
更新游戏中对象的游戏逻辑和物理等
根据游戏对象中的数据对每个游戏对象进行openGL绘制调用(线程1不断更新)
除非您在游戏的当前状态下每个游戏对象都有两个副本,否则您必须暂停线程1,而线程2进行抽奖,否则游戏对象将在该对象的抽奖中途更新。是不可取的!
但是停止线程1以安全地从线程2进行绘制调用会杀死多线程/并发的整个目的
除了使用成百上千或同步对象/围栅之外,还有没有更好的方法可以利用多核体系结构提高性能?
我知道我仍然可以使用多线程为尚未成为当前游戏状态一部分的对象加载纹理和编译着色器,但是如何在不影响绘制和更新的情况下对活动/可见对象执行此操作?
如果我在每个游戏对象中使用单独的同步锁怎么办?这样,任何线程都只会阻塞一个对象(理想情况),而不是整个更新/绘制周期!但是在每个对象上锁定(游戏可能有上千个对象)的代价是多少?