大家好!我在delphi中用Tthread类对象创建了多线程,看到帮助里说要避免多个线程同时访问全局变量。我是这样用的全局变量,请大家指点是否应该采取措施避免访问冲突。谢谢!var1,var2为全局变量 thread1和thread2 分别为不同的 线程类实例thread1和thread2同时运行,thread1动态改变某一个变量var1的值,thread2判断var1为某一个值时,做出别的动作,如改变var2的值。希望大家给予指点,小女子不胜感激!!1

解决方案 »

  1.   

    uses
      SyncObjs;var
      cs: TCriticalSection;主程序创建时
      cs := TCriticalSection.Create;主程序销毁时
      FreeAndNil(cs);线程访问变量时
      cs.Enter ;
      var1 := ...
      cs.Leave ;最讨厌说什么……小女子什么什么的,让我……受不了非得回帖……
      

  2.   

    我写的简单,她说的不是这个意思。她要判断某个时间点var1的值来改写var2,她怕判断的时候值发生变化。所以需要用这个。
      

  3.   

    谢谢大家的回帖,说具体些:
       var1:boolean;
       var2:integer;
       thread1中将var1:=true
       thread2中判断  var1为true时,var2:=10;
                     var1为false时,var2:=100;
       我是这样使用的,请问还需要 使用临界区来避免访问全局变量var1冲突吗?希望大家能给予指点,不胜感激!!!!
      

  4.   

    个人觉得如果都是 boolean 类型赋值操作,没必要同步保护
    var
      T: Boolean
    begin
      T := True; // 
    end;asm
      mov T, $01
    end;
    一条指令就可以完成, 另外线程去读不会有问题的
    纯属个人意见