我正在寻找一种用于C ++应用程序的分层数据结构,它非常适合多线程的频繁读/写操作。
我打算将此数据结构用于多种用途,但最具指示性的用例可能是场景图实现,其中节点可以包含终端属性以及子节点。在这种用法中,主线程上的函数将重复遍历节点树并将场景渲染为OpenGL上下文,而另一个线程则对场景的属性执行定期更改。
暂时忽略多线程读/写访问,我可以想到许多实现此功能的自定义和开箱即用的方法(一些比其他更有效)。
JSON是一种解决方案。虽然,在C ++上下文中,我宁愿避免将存储终端属性作为字符串存在的大量词法转换。在我的例子中,最好使用boost :: variant作为我的通用属性类型。
但我当然主要担心的是多线程问题。
我想到的一些可能的解决方案是:
为层次结构中的每个节点使用锁定机制的自定义实现
有没有人对有效的解决方案有任何想法? 像MongoDB这样的数据库解决方案是否足够快以便在场景图形中使用(60 fps刷新等)? (并行)Boost图形库在这里有用吗?是否有其他我不知道的工具可能在这里有用?我知道OpenScenegraph提供了某种多线程支持,但我希望找到一个更通用的解决方案(并且不会带来该库的所有其他开销)。