昨天在做存储服务的压力测试,后台是采用多线程根据玩家唯一标识做线程划分的,在测试的过程中发现,进行存储的时候,会发生玩家数据错乱的情况。
一开始怀疑是上层逻辑在处理数据的时候发生了错乱,导致保存的时候玩家数据是乱的了。
后来经过详细的日志跟踪,发现其实在存储之前上层发送过来的数据是完全正确的,在存储过后,再读取出来,数据就是乱的了。在这里要说下log4cplus还是非常优秀的日志库,能够在日志中记录线程ID,对于多线程的调试能起到一定的帮助作用
仔细看了一下代码,发现原来是处理数据存储的对象函数里面为了减少栈的大小,使用了一个静态的buf。
对象本身虽然是每个线程里面一个,但是buf却是共享的,这就导致了存储sql拼装的时候,发生了错乱了。
对此错误,记录一下,防止以后发生类似的问题。
不要在类的函数中使用static字段,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/chobits/p/3781282.html