Greg Wooledge wrote:
> L A Walsh wrote:
> > I  remember some implementations only wait till the clock reaches the
> > new time in seconds -- meaning that the actual sleep time could be
> > .001 seconds.
> 
> If true, that would actually violate POSIX.  The sleep time must be
> "at least" as long as the operand.  It may be longer, but never shorter.
> 
> You might be remembering it wrong.

I also remember that at one time the Unix sleep was implemented by
polling a second granularity clock register.  If one was not lucky
then polling just before the second turned, and then just after, would
cause sleep to exit because the second had changed.  A 1 second sleep
was 0-1 seconds.  Therefore if one required at least a 1 second sleep
one would need to ask for at least 2 seconds or it was possible for
there to be very little sleep at all.  A sleep 2 might be 1-2 seconds.
Of course sleeping for 300 would rarely care if it was actually 299 or
300 so longer sleeps were never a practical problem.

I recall this as a historical Unix kernel limitation.  I forget which
versions now and am not in a position to do a search through the
historical record to figure out which kernels did it that way.  I
never worked on any such running system but recall it from comments
written at the time.  I don't think it is true with any modern
kernels.  Or even with older ones such as the venerable HP-UX 10.20
from 1996!  I think it would be difficult to impossible to find any
running Unix-like system outside of a museum environment that still
behaved that old way.

And certainly any using the fractional second extension is past any
need to worry about the problem.  Because any such system with the
problem would only handle to a granularity of integer seconds anyway.

Bob


Reply via email to