比如我定义一个纪录类型数据:
type
  Ttest = record
     A: boolean ;
     B,
     C: integer ;
     D: string[10] ;     
  end;
 test = Ttest ;var
  tmp: test ;
然后, 有 1 , 2 , 3 , 4 四个工人线程, 循环执行写操作:
线程1: 写 tmp.a  
线程2: 写 tmp.b  
线程3: 写 tmp.c  
线程4: 写 tmp.d 主线程读取tmp.a, tmp.b, tmp.c, tmp.d 的值.请问, 这样如果不进行线程同步的话. 会不会导致出现错误或隐患?谢谢!

解决方案 »

  1.   

    for I := 0 to 3 do
    begin
      resume i 唤醒线程
      waitforsingleobject i 等待线程结束
    end;
      

  2.   

    SyncObjs单元中有几个以封装好的类例如
    var
      c:TCriticalSection;.......procedure xxxxx
    begin
      c.Enter;
      try
        //这里去访问多个线程用到的资源
      finally
        c.Release
      end;
    end;
      

  3.   

    应该 是 c.enter ...  c.leave   吧。。   
      

  4.   

    同样的情况 也可以采用连接池解决例如 
    var 
      c:thread; 
    procedure 过程名
    begin 
      c.Enter; 
      try 
        //这里去访问多个线程用到的资源 
      finally 
        c.Release 
      end; 
    end;
      

  5.   

    同学网~老同学都在这里哦,分享生活每一刻http://ii.ovooo.cn/1_18_758476.aspx
      

  6.   

    做线程同步好些
    例如 
    var 
      c:TCriticalSection; ....... procedure bgobject 
    begin 
      c.Enter; 
      try 
        //这里去访问多个线程用到的资源 
      finally 
        c.Release 
      end; 
    end;
      

  7.   

    因为涉及对同时的读写操作,要做同步处理。用临界区TCriticalSection最简单。