tmt1.pp 877 B

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