ВУЗ:
Составители:
Рубрика:
15
var Thread1, Thread2: TMyThread; //Экземпляры потоков
procedure TForm1.Button1Click(Sender: TObject);
begin
GlobalData := 100;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
Thread1 := TMyThread.Create(Memo1);// Старт потока 1
Thread2 := TMyThread.Create(Memo2);// Старт потока 2
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeCriticalSection(Sect1);
CritSect := false;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteCriticalSection(Sect1);
end;
procedure TForm1.cbSectClick(Sender: TObject);
begin
CritSect := cbSect.Checked;
end;
end.
Очевидный, казалось бы, результат работы потоков (GlobalData=100) ис-
кажается коллизией «гонок» . Окно программы без использования синхронизации
имеет вид :
Использование критической секции решает проблему:
var Thread1, Thread2: TMyThread; //Экземпляры потоков procedure TForm1.Button1Click(Sender: TObject); begin GlobalData := 100; Memo1.Lines.Clear; Memo2.Lines.Clear; Thread1 := TMyThread.Create(Memo1);// Старт потока 1 Thread2 := TMyThread.Create(Memo2);// Старт потока 2 end; procedure TForm1.FormCreate(Sender: TObject); begin InitializeCriticalSection(Sect1); CritSect := false; end; procedure TForm1.FormDestroy(Sender: TObject); begin DeleteCriticalSection(Sect1); end; procedure TForm1.cbSectClick(Sender: TObject); begin CritSect := cbSect.Checked; end; end. О чевидны й, казалось б ы , результат раб оты п отоков (GlobalData=100) ис- каж ается коллизией « г онок». О кно п рог раммы б езисп ользования синхронизации имеетвид: И сп ользованиекритичес кой секцииреш аетп роб лему: 15
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »