首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关系" 缓存数据" 和 "多线程" 的有关问题,

2012-03-29 
有关系 缓存数据 和 多线程 的问题,请指教~ voidWriteLog(file,data,flag){staticDWORDdwCacheBuffSiz

有关系" 缓存数据" 和 "多线程" 的问题,请指教~

void   WriteLog(file,data,flag)
{
  static   DWORD   dwCacheBuffSize   =   0;//已缓存数
  static   char   szCacheBuff[2][10240+1];//缓存空间
strcpy(szCacheBuff[flag]+dwCacheBuffSize,data);
dwCacheBuffSize   +=   strlen(data);

........
.......
......
}

线程()
{
EnterCriticalSection(Section1)
WriteLog1(文件1,数据1);
LeaveCriticalSection(Section1)

EnterCriticalSection(Section2)
WriteLog2(文件2,数据2);
LeaveCriticalSection(Section2)
}
main()
{
  线程(N);//启动N个线程。
}
问题:
为什么数据1的内容有时候跑到文件2到去,数据2的内容有时候跑到文件1到去。
是static   的缘故吗?static   会有什么影响?

现在的解决方法是
写两个一样代码的WriteLog函数,但是这样重复代码多了。

先谢了!

[解决办法]
不使用static即可。
google“可重入”,会有更多知识。
[解决办法]
不懂,帮忙顶
[解决办法]
1. 你在WriteLog中使用static类型缓冲毫无意义
本来的可重入代码被搞成不可重入的,还用了一把锁

解决方法:
1. 去掉static
or
2. 拷贝数据前,注意清空你的缓冲区
[解决办法]
WriteLog() 中 难道 就不用加锁吗??
[解决办法]
写成这样就“没上面的问题”。
上面应该具有重入性了吧!
但是不好看!
---------------------------

函数中有访问全局变量, 依然是不可重入, 哈哈。
静态变量和 全局变量效果是一样的.

热点排行