比如对一个字符串,有两个线程分别对它进行删除和增加新的字符,请问有什么好的方法能够保证安全?

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }  end;var
      Form1: TForm1;
      CriticalSection: TRTLCriticalSection; {临界区信息}implementation{$R *.DFM}function ThreadFunc(Info: Pointer): Integer; stdcall;
    var
      Count: Integer;
    begin
      EnterCriticalSection(CriticalSection);
      Form1.Button1.Enabled:=False;
      for Count := 0 to 10000 do
      begin
        Form1.Edit1.Text := IntToStr(Count);
        Application.ProcessMessages;
      end;
      Form1.Edit1.Text := '线程结束!';
      Form1.Memo1.Lines.Add('线程结束!');
      Sleep(500);
      Form1.Button1.Enabled:=true;
      LeaveCriticalSection(CriticalSection);
      ExitThread(4);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      ThreadId1, ThreadId2: DWORD;
    begin
      Button1.Enabled:=false;
      if CriticalSection.RecursionCount<>0 then
         DeleteCriticalSection(CriticalSection);
      InitializeCriticalSection(CriticalSection);
      Memo1.Lines.Add('创建线程1.');
      CreateThread(nil, 0, @ThreadFunc, nil, 0, ThreadId1);
      Memo1.Lines.Add('创建线程2.');
      CreateThread(nil, 0, @ThreadFunc, nil, 0, ThreadId2);
    end;end.