Advertisement
pmcgee

Delphi/Win 'Atomic' Integers

Oct 7th, 2019
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.52 KB | None | 0 0
  1. program ThreadDemo;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5.     System.SysUtils, System.Threading, System.Classes, System.SyncObjs, Windows;
  6. var
  7.     T            : cardinal;
  8.     Foo          : integer = 0;
  9.     Task1, Task2 : ITask;
  10. const
  11.     MAX_COUNT = 100000;
  12. begin
  13.     T := gettickcount;
  14.     try
  15.       Task1 := TTask.Run(procedure
  16.                          var i,j : integer;
  17.                          begin
  18.                            for i := 1 to MAX_COUNT do
  19.                                {for j := 1 to 42 do
  20.                                    AtomicIncrement(foo);
  21.                                    //inc(foo);}
  22.                                TInterlocked.Add(Foo, 42)
  23.                                //Foo := Foo + 42;
  24.                          end);
  25.       Task2 := TTask.Run(procedure
  26.                          var i,j : integer;
  27.                          begin
  28.                            for i := 1 to MAX_COUNT do
  29.                                {for j := 1 to 42 do
  30.                                    AtomicIncrement(foo);
  31.                                    //inc(foo);}
  32.                                TInterlocked.Add(Foo, 42);
  33.                                //Foo := Foo + 42;
  34.                          end);
  35.       TTask.WaitForAll([Task1, Task2]);
  36.       //Assert(Foo = 2 * 42 * MAX_COUNT);
  37.     except
  38.       on E: Exception do
  39.             Writeln(E.ClassName, ': ', E.Message);
  40.     end;
  41.    
  42.     T := gettickcount - T;
  43.     writeln;
  44.     writeln(T);
  45.     writeln(2 * 42 * MAX_COUNT);
  46.     writeln(foo);
  47.     readln;
  48. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement