小编Rim*_*ire的帖子

让线程在其他对象中等待conditon

如果我想限制可以同时在词典中完成的线程查找的数量,该怎么做?并让线程睡眠,直到他们可以访问词典.即.如果两个查找已经在并行中进行,则其他查找必须等待,直到LookupCount小于2才能执行.

TLexicon
  MaxLookups: Integer;
  LookupCount: Integer;
Run Code Online (Sandbox Code Playgroud)

除了TLexicon之外,我创建了TLookupJob,它可以在TLookupThread中执行.LookupJob.Execute过程调用词典上的查找并等待直到有响应.

因此,LookupThreads必须睡眠,直到Lexicon.LookupCount小于Lexicon.MaxLookups.为此,我在LookupJob.Execute中调用GoSleep(事件),并且LookupThread的执行停止.但是如何以及何时发出信号.其余的设计对我来说还不清楚.

这里可以使用什么设计?

到目前为止,我已经创建了许多类:

TLexicon - 具有MaxLookups和LookupCount,以及查找功能.

LookupItem - 包含LookupWord和Response.传递给Lexicon.Lookup.

TLookupJob - 具有执行过程,以及GoSleep使用事件进行睡眠的WakeUp过程.

LookupThread - 执行LookupJob

随意改变设计.

delphi multithreading freepascal lazarus

0
推荐指数
1
解决办法
292
查看次数

线程安全测试/减少

此代码线程是否安全,或者在执行InterLockedDecrement之前是否可以通过另一个线程更改FCount?

procedure TMyObject.Wait;
begin
  if FCount > 0 then
    InterLockedDecrement(FCount);
  ..
end;
Run Code Online (Sandbox Code Playgroud)

delphi multithreading freepascal lazarus

0
推荐指数
2
解决办法
137
查看次数

标签 统计

delphi ×2

freepascal ×2

lazarus ×2

multithreading ×2