| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- program RecursiveMTP1;
- {$mode objfpc}{$H+}
- uses
- {$IFDEF UNIX}
- cthreads, cmem,
- {$ENDIF}
- MTProcs;
- type
- TArrayOfInteger = array of integer;
- var
- Items: TArrayOfInteger;
- type
- TFindMaximumParallelData = record
- Items: TArrayOfInteger;
- Left, Middle, Right: integer;
- LeftMaxIndex, RightMaxIndex: integer;
- end;
- PFindMaximumParallelData = ^TFindMaximumParallelData;
- procedure FindMaximumParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem);
- var
- Params: PFindMaximumParallelData absolute Data;
- LeftParams, RightParams: TFindMaximumParallelData;
- begin
- if Params^.Left+1000>Params^.Right then begin
- // compute the maximum of the few remaining items
- Params^.LeftMaxIndex:=Params^.Items[Params^.Left];
- for i:=Params^.Left+1 to Params^.Right do
- if Params^.Items[i]>Params^.LeftMaxIndex then
- end else begin
- end;
- end;
- function FindMaximumIndex(Items: TArrayOfInteger): integer;
- begin
- end;
- begin
- SetLength(Items,10000000);
- for i:=0 to length(Items)-1 do Items[i]:=Random(1000);
- ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address, startindex, endindex, optional data
- end.
|