blob: 92ab921c0dfc6100dbaf0f65e05d75477d4aa7db (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
{ %target=win32 }
{$mode objfpc}
uses sysutils
, windows
;
var
SharedInt : PInteger;
target : integer;
savetarget : integer;
begin
target := 0;
savetarget := system.InterlockedCompareExchange(Target, 1, 0);
Writeln(format('%d = InterlockedCompareExchange(Target= %d , 1, 0)',[savetarget, target]));
SharedInt := AllocMem(SizeOf(Integer));
SharedInt^ := 0;
// here is runtime exception rised - access to invalid memory
savetarget := windows.InterlockedCompareExchange(SharedInt^, 1, 0);
Writeln(format('%d = InterlockedCompareExchange(SharedInt^= %d , 1, 0)',[savetarget, SharedInt^]));
FreeMem(SharedInt);
end.
|