2011-01-20 43 views
7

如果有多個線程將固定長度的數據(例如4字節地址)寫入單個管道,並且該管道中只有一個讀取器,是否保證讀取器將按順序獲取字節?換句話說,write()是一個管道原子?unix管道多個寫入器

回答

5

http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html

原子/非原子:寫是原子 如果寫入一個 操作總量不與來自任何其他過程數據 交織。當有多個寫入器 將數據發送到單個讀取器時,這是有用的 。 應用程序需要知道有多大的寫入請求可以預期爲 原子執行。該最大值爲 ,稱爲{PIPE_BUF}。這個量的IEEE 標準1003.1-2001並沒有說明 寫入請求是否超過 {PIPE_BUF}字節是原子的,但是 要求寫入{PIPE_BUF}或者更少的字節應該是原子的。

+0

謝謝。我看到手冊頁http://linux.die.net/man/2/write並沒有看到任何東西。 – Manish 2011-01-20 04:25:53