In a single-threaded application I use code like this:
Interface
function GetNextUID : integer;
Implementation
function GetNextUID : integer;
const
cUID : integer = 0;
begin
inc( cUID );
result := cUID;
end;
This could of course be implemented as a singleton object, etc. – I’m just giving the simplest possible example.
Q: How can I modify this function (or design a class) to achieve the same result safely from concurrent threads?
You can use the
Interlocked*functions:More modern Delphi versions have renamed these methods into
Atomic*(likeAtomicDecrement,AtomicIncrement, etc), so the example code becomes this: