Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program ThreadDemo;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils, System.Threading, System.Classes, System.SyncObjs, Windows;
- var
- T : cardinal;
- Foo : integer = 0;
- Task1, Task2 : ITask;
- const
- MAX_COUNT = 100000;
- begin
- T := gettickcount;
- try
- Task1 := TTask.Run(procedure
- var i,j : integer;
- begin
- for i := 1 to MAX_COUNT do
- {for j := 1 to 42 do
- AtomicIncrement(foo);
- //inc(foo);}
- TInterlocked.Add(Foo, 42)
- //Foo := Foo + 42;
- end);
- Task2 := TTask.Run(procedure
- var i,j : integer;
- begin
- for i := 1 to MAX_COUNT do
- {for j := 1 to 42 do
- AtomicIncrement(foo);
- //inc(foo);}
- TInterlocked.Add(Foo, 42);
- //Foo := Foo + 42;
- end);
- TTask.WaitForAll([Task1, Task2]);
- //Assert(Foo = 2 * 42 * MAX_COUNT);
- except
- on E: Exception do
- Writeln(E.ClassName, ': ', E.Message);
- end;
- T := gettickcount - T;
- writeln;
- writeln(T);
- writeln(2 * 42 * MAX_COUNT);
- writeln(foo);
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement