ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
