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://lutaf.com/38.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接