dps/src/Unique.m3


Copyright (C) 1994, Digital Equipment Corp.

MODULE Unique;

IMPORT Thread, Fmt;

VAR sequencerMutex: Thread.Mutex;
VAR sequencer: INTEGER;

PROCEDURE Identifier (): TEXT =
  BEGIN
  RETURN "A" & Fmt.Int (Integer());
  END Identifier;

PROCEDURE Integer (): INTEGER =
  BEGIN
  LOCK sequencerMutex DO
    sequencer := sequencer + 1;
    RETURN sequencer;
    END;
  END Integer;

  BEGIN
  sequencer := IntegerNever;
  sequencerMutex := NEW (MUTEX);

  END Unique.