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

1
2
3
4
5
void CSimpleSocket::Read(string & buf)
{
static char buf[BUF_SIZE];
//....
}

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

libc time.h里面几个函数不是线程安全,就是这个原因.这样做,其实也省不了多少资源,去掉static不过多了两条push stack的指令.这种优化强迫症,自从学了汇编以来一直这样.有个名言是:先把事情做正确,不要想当然的优化,英文句子我忘了:(