开始写博客了,今天先从一个宕机说起。。。

开始写博客了,今天先从一个宕机说起。。。

嗯,好不容易,CPPBLOG开通了。今天先写点什么。
随便写的东西吧,先说说今天遇到的一个宕机BUG吧。
公司项目用的引擎是从TORQUE引擎上拓展增强的一个版本,大量利用的TORQUE原本带的一些基础库,函数等等
其中网络方面有一个比较重要的类BitStream,它可以按位进行序列化反序列化操作。功能比较强大,故在其他几个工程文件中
都有引用,但是今天服务器突然出现了一个宕机BUG,在反序列化的时候出现了问题。这个BUG在两周内只出现过两次,开始
没有重视,今天决定好好查一下。

因为是序列化的问题,所以首先想到的是有可能序列化和非序列化不匹配,可以查了一圈下来,并没有什么问题。
后来想到因为BUG在两周内才出现了两次,才想到有可能是多线程出的问题,后来仔细查看了一下BitStream::readString这个方法
原来这个类为了更有效的传递字符串,采用了HUFFMAN压缩,而这个辅助类居然是一个静态变量。这下明白了,就是这个静态变量
惹得祸。

另外提一下,TORQUE一直是按单线程设计的引擎,搬到多线程环境下一定要好好检查一下,没准什么地方一不小心就能到地雷。
另,如果大家在设计程序的时候也遇到多线程静态变量的问题,可以把变量声明为TLS,这样可以一劳永逸,但是大家小心使用。
PS:具体TLS去查MSDN

你可能感兴趣的:(开始写博客了,今天先从一个宕机说起。。。)