多线程的协调与同步之临界区
type TForm1 = class(TForm) lst1: TListBox; btn1: TButton; procedure btn1Click(Sender: TObject); private //声明一个函数原型 procedure THreadsDone(Sender:TObject微信小程序开发); public { Public declarations } end; //首先,声明一个类,继承自线程类 TFooTHread= class(TThread) protected //声明一个过程,覆盖父类的同名过程 procedure Execute;override; end;var Form1: TForm1;
implementation
{$R *.dfm}
{ TFooTHread }const MaxSize=128;var NumID:Integer=0; GlobalArray:array[1..MaxSize] of Integer; CS:TRTLCriticalSection;//临界区
procedure TFooTHread.Execute;var i,Index:Integer;begin Inc(NumID); Index:=NumID; //在线程结束时调用过程 ThreadsDone OnTer沈阳SEOminate:=Form1.ThreadsDone; //进入临界区 EnterCriticalSection(CS); for i:=1 to MaxSize do begin GlobalArray[i]:=i; Form1.lst1.Items.Add(IntToStr((i))+' '+InttoStr(Index)+'号线程正在执行操作'); Sleep(5); end; //在线程结束的时候,离开临界区 LeaveCriticalSection(CS);end;
{ TForm1 }
procedure TForm1.THreadsDone(Sender: TObject);begin // 删除临界区 DeleteCriticalSection(CS);end;
procedure TForm1.btn1Click(Sender: TObject);begin //初始化临界区 InitializeCriticalSection(CS); //创建线程 TFooTHread.Create(False); //创建线程 TFooTHread.Create(False);end;