再开一贴:多线程局部变量的问题 一起给分哈
我有一个线程类,里面有一个数组变量(在线程内定义的),在线程create的初始化数组,在exectue里赋值
我实例化这个线程(两个以上实例)后,发现这个数组变量的值混乱了,数组里有赋值的,中间有为零的(初始化状态)!如果只运行一个实例,则数组都大于零。我看书上说,线程的局部变量是跟随实例的,在我这里怎么变成公共变量了?????
为什么?怎么解决?
[解决办法]
原因基本上是:
多个线程实例访问数据库,共用一个ADOConnection连接特别是在ACCESS中有很大的问题,解决的方法是只能在同一时间内只允许一个数据集连接ADOConnection.
还有你在线程执行函数中初始化全局变量临界区CS,这肯定有问题,而是应该在你线程单位初始化部分来初始化CS。
大概就是这样吧,可能还有不到的地方,你自己再看看吧
[解决办法]
线程局部变量不是你理解的这样的。
这个数组不是线程局部变量。他只是线程类的成员。多线程访问时你需要做同步处理。
[解决办法]
加临界区!
[解决办法]
没看到fieldnum 在哪里声明的
要么jzfieldname[i]没赋值,
begin //15
jzfieldname[fieldnum] := fieldname;没执行到
要么fieldnum是个公共变量
[解决办法]
看看书上说的,线程局部存储,挺麻烦的