【发布时间】:2011-06-12 05:07:54
【问题描述】:
如果有多个线程将固定长度的数据(例如 4 字节地址)写入单个管道,并且该管道只有一个读取器,是否保证读取器将按顺序获取字节?换句话说,write() 是管道原子的吗?
【问题讨论】:
如果有多个线程将固定长度的数据(例如 4 字节地址)写入单个管道,并且该管道只有一个读取器,是否保证读取器将按顺序获取字节?换句话说,write() 是管道原子的吗?
【问题讨论】:
http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html
原子/非原子:写入是原子的 如果全部金额写在一个 操作不与数据交错 从任何其他过程。这很有用 当有多个作家时 向单个阅读器发送数据。 应用程序需要知道有多大 可以预期写请求是 原子地执行。这个最大值是 称为 {PIPE_BUF}。本卷 IEEE 标准 1003.1-2001 没有说是否 写请求超过 {PIPE_BUF} 字节是原子的,但是 要求写入 {PIPE_BUF} 或 更少的字节应该是原子的。
【讨论】:
PIPE_BUF 的值在 Unix 系统之间差异很大。有关观察值的整理,请参见此处:ar.to/notes/posix#pipe-buf