recursivemtp1.lpr 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. program RecursiveMTP1;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}
  5. cthreads, cmem,
  6. {$ENDIF}
  7. MTProcs;
  8. type
  9. TArrayOfInteger = array of integer;
  10. var
  11. Items: TArrayOfInteger;
  12. type
  13. TFindMaximumParallelData = record
  14. Items: TArrayOfInteger;
  15. Left, Middle, Right: integer;
  16. LeftMaxIndex, RightMaxIndex: integer;
  17. end;
  18. PFindMaximumParallelData = ^TFindMaximumParallelData;
  19. procedure FindMaximumParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem);
  20. var
  21. Params: PFindMaximumParallelData absolute Data;
  22. LeftParams, RightParams: TFindMaximumParallelData;
  23. begin
  24. if Params^.Left+1000>Params^.Right then begin
  25. // compute the maximum of the few remaining items
  26. Params^.LeftMaxIndex:=Params^.Items[Params^.Left];
  27. for i:=Params^.Left+1 to Params^.Right do
  28. if Params^.Items[i]>Params^.LeftMaxIndex then
  29. end else begin
  30. end;
  31. end;
  32. function FindMaximumIndex(Items: TArrayOfInteger): integer;
  33. begin
  34. end;
  35. begin
  36. SetLength(Items,10000000);
  37. for i:=0 to length(Items)-1 do Items[i]:=Random(1000);
  38. ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address, startindex, endindex, optional data
  39. end.