https://elixir.bootlin.com/linux/v5.19/source/fs/pipe.c#L247
パイプがいっぱいになると、リーダーが目を覚ましてデータを読み取る必要はありませんか?
/*
* We only wake up writers if the pipe was full when we started
* reading in order to avoid unnecessary wakeups.
*
* But when we do wake up writers, we do so using a sync wakeup
* (WF_SYNC), because we want them to get going and generate more
* data for us.
*/
was_full = pipe_full(pipe->head, pipe->tail, pipe->max_usage);
答え1
このコードはパイプの読み込み中に実行されます。パイプを読み込んでいるので、読み取りが完了した後もパイプがいっぱいにならないため、より多くの書き込みのためのスペースがあります。
読み取りを開始する前にパイプがいっぱいになると、パイプがいっぱいでブロックされたビルダーがある可能性があります。待ち時間を最小限に抑えるために、これらのビルダーが今目覚めるのが便利です。パイプがいっぱいになっていない場合、ブロックされたライターはパイプがいっぱいであるためブロックされていないため、パイプのスペースを空にしても役に立ちません。
読者が目を覚ましたパイプを書くとき。