存档

文章标签 ‘multithread’

多线程静态方法重入错误

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的指令.这种优化强迫症,自从学了汇编以来一直这样.有个重要原则是

先把事情做正确

分类: 技术研究 标签: ,