在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第五节:多个线程同时执行相同的任务
1.锁
设,有一个房间 X ,X为全局变量,它有两个函数 X.Lock 与 X.UnLock;
有如下代码:
X . Lock;
访问资源 P;
X . Unlock;
现在有A,B两个线程时空都要执行此段代码。
当线程A执行了 X.Lock 之后,在没有执行完 X.Unlock 之前,第二个线程B此时也来执行 X.Lock ,
线程B就会阻塞在 X.Lock 这句代码上。我们可以认为,此时,线程A进入房间,其它线程不准再进入房间。
只能在外面等,直到线程A执行完 X.Unlock 后,线程A退出了房间,此时线程B才可以进入。
线程B进入了房间后,其它线程此时同样不准再进入。
即:多个线程用本段代码“访问资源P”的操作是排队执行的。
2. TMonitor
在 delphi XE2 及以后的版本中,提供了一个方便的锁功能。TMonitor。
它是一个Record, TMonitor.Enter(X); 与 TMoniter.Exit(X); 等效于上面 lock 与 unlock;
X 可以是任何一个 TObject 实例。
本例源码下载(delphi XE8版本):FooMuliThread.zip
unit uCountThread; interface uses uFooThread; type TCountThread = class ;
TOnGetNum = function (Sender: TCountThread): boolean of object ; //获取 Num 事件。
TOnCounted = procedure (Sender: TCountThread) of object ;
TCountThread = class (TFooThread)
private
procedure Count;
procedure DoOnCounted;
function DoOnGetNum: boolean ;
public
procedure StartThread; override;
public
Num: integer ;
Total: integer ;
全部评论
专题导读
热门推荐
热门话题
阅读排行榜
|
请发表评论