2

为什么当没有作者时读者可以存在,但当管道中没有读者时,作者不能存在?

. 是不是因为读取器是要等待的,所以如果没有写入器也没关系,而写入器已准备好数据,即使它已准备好数据,也不知道它必须等待多长时间。

. 是不是因为作者的文件描述符可能被读者滥用(我不清楚如何)

4

3 回答 3

5

您一定在谈论管道的一些特定实现。

[Proc 1]
$ mkfifo /tmp/mypipe
$ echo "No Boom Here" > /tmp/mypipe
<process blocks>

[Proc 2, later]

$ cat /tmp/mypipe
No Boom Here

因此,它在 Unix 系统上运行良好,您可以在没有读取器或写入器的情况下读取或写入管道。但是,您的进程将阻塞,直到同伴注册为止。

也许这是Windows的事情?

顺便说一句,Unix方式是正确的行为,恕我直言。它应该阻止任何一种方式。

于 2009-06-07T18:04:45.220 回答
1

这是因为错误条件是由输出触发的。因此,没有作者的读者只是坐在那里,不打扰任何事情,因为没有输出试图去某个地方而不能去。没有读者的作家试图发送其输出、不能和错误。

于 2009-06-07T17:19:02.700 回答
0

在阅读器的情况下,它会立即阻塞(睡眠),因为没有什么可阅读的。如果作家开始读者继续睡觉,并没有造成伤害。

对于作家来说,它会填满缓冲区并阻塞。如果没有读者出现,那将是纯粹的系统资源浪费。

仅供参考,以上是有根据的猜测。

于 2009-06-07T17:20:07.970 回答