tmt1.pp 892 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. { %version=1.1 }
  2. {$mode objfpc}
  3. uses
  4. sysutils
  5. {$ifdef unix}
  6. ,cthreads
  7. {$endif}
  8. ;
  9. const
  10. {$ifdef cpuarm}
  11. {$define slowcpu}
  12. {$endif cpuarm}
  13. {$ifdef slowcpu}
  14. threadcount = 40;
  15. stringlen = 2000;
  16. {$else slowcpu}
  17. threadcount = 100;
  18. stringlen = 10000;
  19. {$endif slowcpu}
  20. var
  21. finished : longint;
  22. threadvar
  23. thri : longint;
  24. function f(p : pointer) : ptrint;
  25. var
  26. s : ansistring;
  27. begin
  28. writeln('thread ',longint(p),' started');
  29. thri:=0;
  30. while (thri<stringlen) do
  31. begin
  32. s:=s+'1';
  33. inc(thri);
  34. end;
  35. writeln('thread ',longint(p),' finished');
  36. InterLockedIncrement(finished);
  37. f:=0;
  38. end;
  39. var
  40. i : ptrint;
  41. begin
  42. finished:=0;
  43. for i:=1 to threadcount do
  44. BeginThread({$ifdef fpc}@{$endif}f,pointer(i));
  45. while finished<threadcount do
  46. {$ifdef wince}sleep(10){$endif};
  47. writeln(finished);
  48. end.