第一步:
我建立了两个线程,第一个执行
while True do
begin
     ABC1:='86868686';
end;第二个执行
while True do
begin
     ABC2:='86868686';
end;
结果一运行立即死掉第二步:
于是我只建立一个线程执行:
while True do
begin
     ABC1:='86868686';
end;
结果没出问题第三步:
我又建立两个线程,其中一个执行:
while True do
begin
     Sleep(10);
     ABC1:='86868686';
end;
另一个
while True do
begin
     Sleep(10);
     ABC2:='86868686';
end;
结果没出问题,但是第四步
我建立了10个线程依次执行:
while True do
begin
     Sleep(10);
     ABC1:='86868686';
end;while True do
begin
     Sleep(10);
     ABC2:='86868686';
end;while True do
begin
     Sleep(10);
     ABC3:='86868686';
end;while True do
begin
     Sleep(10);
     ABC4:='86868686';
end;




结果挂了那么我是不是能够得出结论,在多线程中,即使是对不同的寄存器进行操作也会有风险?

解决方案 »

  1.   

    补充一下,如果我再while循环中加入了互斥等线程同步的手段,即使是不加Sleep(10)程序运行也没有问题,如:
    while True do
    begin
         WaitForSingleObject(ABCMux,INFINITE);
         ABC1:='86868686';
         ReleaseMutex(ABCMux);
    end;while True do
    begin
         WaitForSingleObject(ABCMux,INFINITE);
         ABC2:='86868686';
         ReleaseMutex(ABCMux);
    end;
      

  2.   

    跟互斥啊什么的一点关系也没有,其实原因很简单,就是线程切换需要时间,因为windows要保存现场啊...这么简单的线程代码,保存现场可是不小的工作量...本来还应该涉及到多核CPU的运行原理和编程方法,也不知道楼主具体是什么环境,就不罗嗦了..
      

  3.   

    我尝试了IsMultiThread := true;
    尝试了TThread多线程
    最后发现,多线程中不使用String就最好了
    所以后来我使用TTimer来代替多线程了
      

  4.   

    http://topic.csdn.net/t/20030916/11/2264761.html
    我从这里看,大家好像对国企的态度都不是很好啊