读书人

有关系quot; 缓存数据quot; 和 quot;多线程quot; 的有关

发布时间: 2012-03-29 12:53:12 作者: rapoo

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

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() 中 难道 就不用加锁吗??
[解决办法]
写成这样就“没上面的问题”。
上面应该具有重入性了吧!
但是不好看!
---------------------------

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

读书人网 >C++

热点推荐