Skip to content

Archive

Archive for April, 2015
Singleton是一个非常常用的设计模式。几乎所有稍大的程序都会用到它。所以构建一个线程安全,并且高效的singleton很重要。既然要讨论这个主题,我们就先来定义一下我们的需求: Lazy initialization。只有在第一次使用的时候才需要初始化出一个singleton对象。这使得程序不需要考虑过多顺序耦合的情况。同时也避免了启动时初始化太多不知道什么时候才会用到的东西。 线程安全。多个线程有可能同时调用singleton。如果只需要单线程,那实在没什么需要讨论的。 高效。因为singleton会被反复调用,如果效率低的话浪费太大了。 通用。适合现有的各种平台,以及未来可能出现的平台。 有了这些需求,我们就可以开始讨论如何构造这么一 ...
上个月底,KlayGE已经基本完成了迁移git的任务。这个过程不是一个简单的镜像,而是在导入git的过程中,删除大文件、依赖库等,并可以通过cmake下载、解压和打补丁。对开发者来说,流程上没有什么变化,都是自动完成的。 对于第三方库,之前的做法是从原网站下载发行版代码包,从klayge.org下载补丁,用python patch打上补丁之后使用。对于有些下载速度特别慢的包,比如wpftoolkit,我也放到了klayge.org。同时,KlayGE所要的资源文件也都在klayge.org。这么以来,最近klayge.org的流量激增,本来速度就一般,现在响应更慢了。 第二个缺点是浪费。比如boost,下载包56M,解压后400M,删掉不用的文件,剩下36M我们需要的。这样对带宽和构 ...
KlayGE在2012年就启用了C++11的部分功能。但目前为止所有用到的C++11特性都要求有一个对应的C++98替代品。要么自己实现,要么用Boost的。 随着时间的推移,各个编译器对C++11的支持越来越好。KlayGE支持的所有平台上,都已经有可用的C++11编译器。实际上如果用的编译器是g++或者clang,-std=c++11都是打开的。所以其实只有Windows上的vc9/10还不能很好地支持C++11。 因为vc9已经无法编译boost,留着没啥意义。对于g++ 4.3之前的版本,或者clang 3.0之前的版本,也没什么人用,也没必要留着。这样在KlayGE支持的编译器中,不支持C++11的就剩下vc10。但至少这样就能直接使用vc10所支持的C++11特性。 所以我的计划是,在目前的开发版本 ...