首页 > 技术研究 > 多线程静态方法重入错误

多线程静态方法重入错误

2006年4月6日

Static function variable in multithread

今天花了4个小时来折腾这个.在写一个多线程下载程序,突然发现下载下来的数据包不对,先是怀疑数据拼接有问题,然后是怀疑网络传送端有问题,一个一个的dump出来看.然后用脚本一个一个字节的比对.最后,才知道原来是这个.

void CSimpleSocket::Read(string &buf)
 {  
    static char buf[BUF_SIZE];     //...
}

这种function scope 的static 变量,多线程使用会被反复的修改.

libc time.h里面几个函数不是线程安全,就是这个原因.这样做,其实也省不了多少资源,去掉static不过多了两条push stack的指令.这种优化强迫症,自从学了汇编以来一直这样.有个重要原则是

先把事情做正确

本文永久链接:http://www.xiaokou.org/2006/04/06/48/

转载 请注明:来自小抠大赚-博客 [http://www.xiakou.org]
分类: 技术研究 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.