declare M : Mutex; begin M.Seize; -- Wait infinitely for the mutex to be free ... -- Critical code M.Release; -- Release the mutex ... select M.Seize; -- Wait no longer than 0.5s or delay 0.5; raise Timed_Out; end select; ... -- Critical code M.Release; -- Release the mutex end;