定义了20个线程,线程作的事是:从一个函数里取出一个字符串,然后进行处理,
那个函数如下:每个
Function GetStr : String;
begin
inc(index); //Index 是局部变量定义在implementation之后的
if index<StringList.count then
Result := StringList.Strings[i];
end;
但是在使用过程中发现一个问题:
有可能当某个线程运行到Result := StringList.Strings[i];时,另一个线程已经进来,并且执行了inc(Index);这样就不能取到这个相应的值了。
请问该怎么让程序排队去取??
那个函数如下:每个
Function GetStr : String;
begin
inc(index); //Index 是局部变量定义在implementation之后的
if index<StringList.count then
Result := StringList.Strings[i];
end;
但是在使用过程中发现一个问题:
有可能当某个线程运行到Result := StringList.Strings[i];时,另一个线程已经进来,并且执行了inc(Index);这样就不能取到这个相应的值了。
请问该怎么让程序排队去取??
begin
Lock.Acquire;
try
inc(index); //Index 是局部变量定义在implementation之后的
if index<StringList.count then
Result := StringList.Strings[i];
finally
Lock.Release;
end;
end;
initialization
Lock := TCriticalSection.Create;finalization
Lock.Free;
还有个小问题,也就是说,如果某一线程进去后(还没有退出之前)锁定了,其他线程这个时候进来就不能取到字符串了,请帮忙看看,再次谢谢您.
是不是在执行Lock.Acquire;时,如果Lock已经锁定,就等待,直到解除锁定??
马上给分!!