多线程局部变量的问题
我有一个线程类,里面有一个数组变量(在线程内定义的),在线程create的初始化数组,在exectue里赋值
我实例化这个线程(两个以上实例)后,发现这个数组变量的值混乱了,数组里有赋值的,中间有为零的(初始化状态)!如果只运行一个实例,则数组都大于零。我看书上说,线程的局部变量是跟随实例的,在我这里怎么变成公共变量了?????
为什么?怎么解决?
[解决办法]
上代码....
[解决办法]
肯定你代码错了,上代码才知道
[解决办法]
代码没控制好,别把数组传来传去的,因为他是引用类型,不是值类型,查代码吧
[解决办法]
线程局部存储TLS 要用专门的一套机制才行 如TlsAlloc...
估计你没完全搞清楚 不好乱用
[解决办法]
线程不会,关注一下,
丰富一下自己的知识面
[解决办法]
代码肯定有点问题,我这边测试正常!
type Ta = class(TThread) arr: array[0..1] of Byte; constructor Create; reintroduce; procedure Execute; override; end;constructor Ta.Create;begin arr[0]:=0;arr[1]:=0; inherited Create(False)end;procedure Ta.Execute;begin FreeOnTerminate := True; while not Terminated do begin arr[0]:=1;arr[1]:=2; OutputDebugString(PChar(format('thread%d: %d,%d', [ThreadID, arr[0],arr[1]]))); Sleep(1000); end;end;procedure TForm1.FormCreate(Sender: TObject);begin Ta.Create; Ta.Create;end;