Much worse than pipes is "select()".
You _have_ to wake up anyone waiting with select(), because you cannot
know if any of those select()ers are actually going to then do what
their waiting implies they _may_ do after they wake up.
Essentially, "wake_one()" and "select()" do not mix - they simply
_cannot_ mix. Anybody thinking about wake_one() should think very hard
and very long about the select case, and you'll eventually come to
understand why Linux doesn't currently have a notion of waking up just
one process.
(There are other reasons, but select() is one of the major ones. But it
can be worked on, and we certainly want to have some limited kind of
wake_one() semantics eventually. I just want to make it clear that the
issue isn't as simple as some people make it out to be).
Linus