Re: Revised futex(2) man page for review

From: Peter Zijlstra
Date: Sat Mar 28 2015 - 08:04:03 EST


On Sat, Mar 28, 2015 at 12:47:25PM +0100, Peter Zijlstra wrote:
> FUTEX_WAIT (since Linux 2.6.0)
> This operation tests that the value at the futex word pointed to
> by the address uaddr still contains the expected value val, and
> if so, then sleeps awaiting FUTEX_WAKE on the futex word. The
> load of the value of the futex word is an atomic memory access
> (i.e., using atomic machine instructions of the respective
> architecture). This load, the comparison with the expected
> value, and starting to sleep are performed atomically and
> totally ordered with respect to other futex operations on the
> same futex word. If the thread starts to sleep, it is considâ
> ered a waiter on this futex word. If the futex value does not
> match val, then the call fails immediately with the error
> EAGAIN.
>
> The purpose of the comparison with the expected value is to preâ
> vent lost wake-ups: If another thread changed the value of the
> futex word after the calling thread decided to block based on
> the prior value, and if the other thread executed a FUTEX_WAKE
> operation (or similar wake-up) after the value change and before
> this FUTEX_WAIT operation, then the latter will observe the
> value change and will not start to sleep.
>
> If the timeout argument is non-NULL, its contents specify a relâ
> ative timeout for the wait, measured according to the
> CLOCK_MONOTONIC clock. (This interval will be rounded up to the
> system clock granularity, and kernel scheduling delays mean that
> the blocking interval may overrun by a small amount.) If timeâ
> out is NULL, the call blocks indefinitely.

Would it not be better to only state that the wait will not return
before the timeout -- unless woken -- and not bother with clock
granularity and scheduling delays?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/