 PROCEDURE [INLINE] osp$increment_locked_variable (VAR variable: integer;
        initial_best_guess: integer;
    VAR actual: integer);

{Actual will contain the final contents of the variable.

?? PUSH (LISTEXT := ON) ??

    VAR
      initial: integer,
      result: 0 .. 2;

*IF NOT $true(osv$unix)
    IF initial_best_guess < 0 THEN
      initial := 0;
    ELSE
      initial := initial_best_guess;
    IFEND;
    REPEAT
      #compare_swap (variable, initial, initial + 1, initial, result);
    UNTIL result = 0;
    actual := initial + 1;
*ELSE

    variable := variable + 1;
    actual := variable;

*IFEND
  PROCEND osp$increment_locked_variable;
?? POP ??
