比如我定义一个纪录类型数据:
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 的值.请问, 这样如果不进行线程同步的话. 会不会导致出现错误或隐患?谢谢!
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 的值.请问, 这样如果不进行线程同步的话. 会不会导致出现错误或隐患?谢谢!
begin
resume i 唤醒线程
waitforsingleobject i 等待线程结束
end;
var
c:TCriticalSection;.......procedure xxxxx
begin
c.Enter;
try
//这里去访问多个线程用到的资源
finally
c.Release
end;
end;
var
c:thread;
procedure 过程名
begin
c.Enter;
try
//这里去访问多个线程用到的资源
finally
c.Release
end;
end;
例如
var
c:TCriticalSection; ....... procedure bgobject
begin
c.Enter;
try
//这里去访问多个线程用到的资源
finally
c.Release
end;
end;