In 《c++ concurrency in action》page 387.

```
 template<typename Lockable, typename Rep, typename Period>
  std::cv_status wait_for(
       Lockable& lock,
       std::chrono::duration<Rep, Period> const& relative_time);

```

NOTE The spurious wakeups mean that a thread calling `wait_for()` may wake even though no thread has called `notify_one()` or `notify_all()`. It’s therefore recommended that the overload of `wait_for()` that takes a predicate is used in preference where possible. Otherwise, it’s recommended that `wait_for()` be called in a loop that tests the predicate associated with the condition variable. Care must be taken when doing this to ensure that the timeout is still valid; `wait_until()` may be more appropriate in many circumstances. **The thread may be blocked for longer than the specified duration.** Where possible, the elapsed time is determined by a steady clock.

Why the thread may be blocked for longer than the specified duration when we use `wait_for()`?