2009-06-07 42 views
2

爲什麼讀者在沒有寫作者的情況下可以存在,但是當沒有讀者在管道中時作者存在就沒有問題了?爲什麼管道中存在不對稱行爲

。是否因爲讀者要等待,所以如果沒有作家,而作家已經準備好了數據,並且不知道即使數據已準備好需要等待多久。

。這是因爲作者的文件描述符可能被讀者濫用(我不清楚如何)

+1

呃......有些環境會很好...... – skaffman 2009-06-07 17:07:47

+1

你在說什麼樣的菸斗?命令行管道?命名管道? – Eddie 2009-06-07 17:14:29

回答

0

在讀者的情況下,它會立即阻止(睡眠),因爲沒有什麼可讀的。如果作家開始,讀者繼續睡覺,沒有任何傷害。

對於作家來說,它會填滿緩衝區和塊。如果沒有讀者出現,那將是對系統資源的純粹浪費。

僅供參考,以上是一個有教養的猜測。

1

這是因爲錯誤條件是由輸出觸發的。因此,沒有作家的讀者就坐在那裏,不會打擾任何事情,因爲沒有任何輸出試圖去某個地方而不能。沒有讀者的作家會嘗試發送它的輸出,不能和錯誤。

5

你一定在談論一些特定的管道實現。

[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的方式是正確的行爲,恕我直言。它應該阻止任何一種方式。