【发布时间】:2012-12-07 07:23:47
【问题描述】:
我正在涉足编写多线程游戏结构。我下面是基本结构。 EventManager、LogicManager 和 Renderer 都是线程。他们从一个通用的 Gamestate 类中读取/写入,该类将处理线程之间的所有共享资源。据我了解,Gamestate 在技术上应该是一个单例。那是对的吗?我还想知道如何将其实现为“早期初始化单例”,如下所述:http://www.oodesign.com/singleton-pattern.html#early-singleton,C++ 除外。恐怕我不太精通 C++ 静态,因此我不知道将“私有静态 Singleton 实例 = new Singleton();”放在哪里C++ 中的行。我知道我可以通过解决方法获得相同的效果,但是我想尝试这种方式。
int main(){
Gamestate gs;
EventManager em(&gs);
LogicManager lm(&gs);
Renderer renderer(&gs);
lm.start();
renderer.start();
em.eventLoop();
return 0;
}
【问题讨论】:
-
这里不需要单例。您的
main创建了一个可以在所有线程中访问的对象。您真正要担心的是同步机制。 -
使用单例的最终最佳方法是:不要!单例模式被严重滥用为某种形式的被认为是有福的全局数据。它不是。正如 juanchopanza 所说,您的代码不使用单例,但是应该将其更改为使用单例。
-
您可能应该查看publisher-subscriber 和/或observer 模式,并完全避免共享数据。
-
“技术上应该是单身人士”——谁说的?您在这里拥有它的方式很好 - 制作一个并将其传递到需要的地方。
标签: c++ multithreading singleton