Concurrent computing: Difference between revisions

Content added Content deleted
(→‎{{header|Pascal}}: Re-add Pascal entry. My apologies if I messed up the formatting)
m (→‎{{header|Pascal}}: must be interlocked inc/decrement tse tse tse)
Line 1,465: Line 1,465:
{$ENDIF}
{$ENDIF}
SysUtils, Classes;
SysUtils, Classes;

type
type
TRandomThread = class(TThread)
TRandomThread = class(TThread)
Line 1,479: Line 1,479:
MyStrings: array[0..2] of String = ('Enjoy ','Rosetta ','Code ');
MyStrings: array[0..2] of String = ('Enjoy ','Rosetta ','Code ');
var
var
gblRunThdCnt : NativeInt = 0;
gblRunThdCnt : LongWord = 0;

constructor TRandomThread.Create(const aString: string);
constructor TRandomThread.Create(const aString: string);
begin
begin
Line 1,486: Line 1,486:
FreeOnTerminate := True;
FreeOnTerminate := True;
FString := aString;
FString := aString;
inc(gblRunThdCnt);
interlockedincrement(gblRunThdCnt);
end;
end;

procedure TRandomThread.Execute;
procedure TRandomThread.Execute;
var
var
Line 1,498: Line 1,498:
//output of difference in time
//output of difference in time
Writeln(FString,i:4,GettickCount64-T0 -i:2);
Writeln(FString,i:4,GettickCount64-T0 -i:2);
dec(gblRunThdCnt);
interlockeddecrement(gblRunThdCnt);
end;
end;

var
var
lThreadArray: Array[0..9] of THandle;
lThreadArray: Array[0..9] of THandle;
Line 1,506: Line 1,506:
begin
begin
Randomize;
Randomize;

gblRunThdCnt := 0;
gblRunThdCnt := 0;
For i := low(lThreadArray) to High(lThreadArray) do
For i := low(lThreadArray) to High(lThreadArray) do
lThreadArray[i] := TRandomThread.Create(Format('%9s %4d',[myStrings[Random(3)],i])).Handle;
lThreadArray[i] := TRandomThread.Create(Format('%9s %4d',[myStrings[Random(3)],i])).Handle;

while gblRunThdCnt > 0 do
while gblRunThdCnt > 0 do
sleep(125);
sleep(125);
end.</lang>
end.</lang>

{{out}}
{{out}}

<pre>
<pre>
Enjoy 4 16 0
Enjoy 4 16 0