爲什麼讀者在沒有寫作者的情況下可以存在,但是當沒有讀者在管道中時作者存在就沒有問題了?爲什麼管道中存在不對稱行爲
。是否因爲讀者要等待,所以如果沒有作家,而作家已經準備好了數據,並且不知道即使數據已準備好需要等待多久。
。這是因爲作者的文件描述符可能被讀者濫用(我不清楚如何)
爲什麼讀者在沒有寫作者的情況下可以存在,但是當沒有讀者在管道中時作者存在就沒有問題了?爲什麼管道中存在不對稱行爲
。是否因爲讀者要等待,所以如果沒有作家,而作家已經準備好了數據,並且不知道即使數據已準備好需要等待多久。
。這是因爲作者的文件描述符可能被讀者濫用(我不清楚如何)
在讀者的情況下,它會立即阻止(睡眠),因爲沒有什麼可讀的。如果作家開始,讀者繼續睡覺,沒有任何傷害。
對於作家來說,它會填滿緩衝區和塊。如果沒有讀者出現,那將是對系統資源的純粹浪費。
僅供參考,以上是一個有教養的猜測。
這是因爲錯誤條件是由輸出觸發的。因此,沒有作家的讀者就坐在那裏,不會打擾任何事情,因爲沒有任何輸出試圖去某個地方而不能。沒有讀者的作家會嘗試發送它的輸出,不能和錯誤。
你一定在談論一些特定的管道實現。
[Proc 1]
$ mkfifo /tmp/mypipe
$ echo "No Boom Here" > /tmp/mypipe
<process blocks>
[Proc 2, later]
$ cat /tmp/mypipe
No Boom Here
所以,它工作正常,在Unix系統中,你可以讀或寫一個管道沒有讀者或作家。然而,你的過程將阻止,直到伴侶sigs up。
也許這是Windows的東西?另外,Unix的方式是正確的行爲,恕我直言。它應該阻止任何一種方式。
呃......有些環境會很好...... – skaffman 2009-06-07 17:07:47
你在說什麼樣的菸斗?命令行管道?命名管道? – Eddie 2009-06-07 17:14:29