PIPE_BUF定义了管道可原子写入的数据量,在我的系统(CentOS 6.7)上这个值是4096,写了个程序验证了一下,通过三个维度来考察:
N: 生产者数量
M:每个生产者的生产次数
P:每次写入的块数(每块大小为PIPE_BUF)
实验发现,当P<=2时,无论如何提升N与M,都很难检测到(自己没检测到)数据穿插的现象;
而当P提升到3时,N与M很小就可以检测到数据穿插。所以这里有一个疑问:底层的PIPE原子写入的数据量是不是2 * PIPE_BUF ?
否则如何解释上面的现象。