Данное решение работает только на многоядерных процессорах,
но имеет большое преимущество в простоте реализации.
Для работы должен быть установлен multithreadprocslaz.lpk
Данная программа при вызове с параметром производит 5 перестановок
ханойской башни в 4 потока параллельно, а без параметров - последовательно.
program hanoy;
uses sysutils,mtprocs;
const HEIGHT = 28;
var CYCLE: double;
procedure replace(k:integer;x,y,z:char);
begin
if CYCLE>1000 then CYCLE:=CYCLE/2.0;
if k=1 then
begin
CYCLE:=CYCLE+10.0;
//writeln(x,' => ', y)
end
else
begin
replace(k-1,x,z,y);
//writeln(x, ' => ', y);
CYCLE:=CYCLE+1.0;
replace(k-1, z,y,x);
end;
end;
procedure DoSomethingParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem);
begin
writeln('Loop:',Index);
replace(HEIGHT,'a','c','b');
end;
var x:TDateTime;
i:integer;
begin
CYCLE:=1.5;
x:=time();
if ParamCount=0 then
for i:=1 to 8 do
begin
writeln('Cycle:',i);
replace(HEIGHT,'a','c','b');
end
else
ProcThreadPool.DoParallel(@DoSomethingParallel,1,8,nil,4);
writeln('>',time()*100000-x*100000:2:2);
end.
Free Pascal Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor