tmt1.pp 739 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. threadcount = 100;
  12. stringlen = 10000;
  13. var
  14. finished : longint;
  15. threadvar
  16. thri : longint;
  17. function f(p : pointer) : longint;
  18. var
  19. s : ansistring;
  20. begin
  21. writeln('thread ',longint(p),' started');
  22. thri:=0;
  23. while (thri<stringlen) do
  24. begin
  25. s:=s+'1';
  26. inc(thri);
  27. end;
  28. writeln('thread ',longint(p),' finished');
  29. InterLockedIncrement(finished);
  30. f:=0;
  31. end;
  32. var
  33. i : longint;
  34. begin
  35. finished:=0;
  36. for i:=1 to threadcount do
  37. BeginThread({$ifdef fpc}@{$endif}f,pointer(i));
  38. while finished<threadcount do
  39. ;
  40. writeln(finished);
  41. end.