2017年9月30日
摘要: 享元模式应该算是23个设计模式里面最难理解的了,个人觉得主要原因是四人帮的这个例子做的不好。 享元把一个对象分成内部状态和外部状态。 内部状态:不随外界环境改变而改变的共享部分。 外部状态:随着环境的改变而改变,不能够共享的状态。 如果内部数据相当大并且这样的对象比较多,享元减少的内存会相当可观的。 阅读全文
posted @ 2017-09-30 21:59 zhangshuliai 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 很多时候我们需要在线程A里面生成一个对象,然后在线程B里面使用这个对象。比如线程A生成一个图像对象,线程B使用这个对象生成一个纹理。简单的做法是线程A先new一个图像对象,然后丢给线程B,线程B使用完这个对象后就delete掉它。 但是如果这个对象还有其它用处呢,比如我要使用这个图像数据合成另外一些 阅读全文
posted @ 2017-09-30 21:41 zhangshuliai 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 当某一个线程需要对一段代码或者数据进行访问的时候,为了保证不会有对个线程同时访问这段代码或者数据的情况,都会使用锁来做互斥。 线程A完全访问完代码(下面只说代码,数据是一样的)的时候,线程B才可以访问。如果线程B访问的时候,线程A正在访问,这个时候线程B会阻塞。太多的阻塞和锁会让效率下降。 仔细想一 阅读全文
posted @ 2017-09-30 20:53 zhangshuliai 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 游戏引擎中有这么一个功能,使用获取的图像数据生成一个OpenGL纹理,图像是一个Image对象,纹理是一个Texture对象,最早的伪代码如下: 后来为了改进效率,把所有关于OpenGL接口的调用都放在了一个gl线程中,这时候Texture的initWithImage函数就有很多代码放到gl线程中了 阅读全文
posted @ 2017-09-30 20:08 zhangshuliai 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 同事给了一段代码,用来实现开始录制声音和停止录制,伪代码如下: StartRecord函数开启录制线程,通过m_isRecording 来设置录制状态。 初一看这里没什么问题,并且大多数情况下也确实可以正常工作。但是对于特殊的情况,比如StartRecord之后很快调用EndRecord,这时候St 阅读全文
posted @ 2017-09-30 19:47 zhangshuliai 阅读(363) 评论(0) 推荐(0) 编辑