多线程向同一管道写数据时会不会产生冲突?
时间:2010-08-24
来源:互联网
作者: rain_fish 发布时间: 2010-08-24
作者: hellioncu 发布时间: 2010-08-24
hellioncu 发表于 2010-08-24 17:05
#define PIPE_BUF 4096 /* # bytes in atomic write to a pipe */
找到了,兄台,能解释一下原因吗?
作者: rain_fish 发布时间: 2010-08-24
找到了,兄台,能 ...
rain_fish 发表于 2010-08-24 17:21
这个我没研究过内核,大概是本身实现有锁吧,超过这个值内部需要多次write了
作者: hellioncu 发布时间: 2010-08-24
hellioncu 发表于 2010-08-24 17:05
再请教一个,linux下管道的最大容量是多少?32K?还是可以修改?
作者: rain_fish 发布时间: 2010-08-24
rain_fish 发表于 2010-08-24 17:27
让你失望了,我不知道。
管道用得少,而且一般应用中容量具体多大没多少意义,所以我也不去关心
作者: hellioncu 发布时间: 2010-08-24
管道用得少,而且一般应用中容量具体多大没多少意义,所以我也不去关心
hellioncu 发表于 2010-08-24 17:30
还是非常感谢!
作者: rain_fish 发布时间: 2010-08-24
为什么说是原子的呢,若真是原子的那倒是不需要了

作者: SpringfieldKing 发布时间: 2010-08-24
当要写入的数据量不大于PIPE_BUF时,Linux将保证写入的原子性。如果此时管道空闲缓冲区不足以容纳要写入的字节数,则进入睡眠,直到当缓冲区中能够容纳要写入的字节数时,才开始进行一次性写操作。
当要写入的数据量大于PIPE_BUF时,Linux将不再保证写入的原子性。FIFO缓冲区一有空闲区域,写进程就会试图向管道写入数据,写操作在写完所有请求写的数据后返回。
若是原子操作就不用加锁了把~~

作者: SpringfieldKing 发布时间: 2010-08-24
当要写入的数据量不大于PIPE_BUF时,Linux将保证写入的原子性。如果此时 ...
SpringfieldKing 发表于 2010-08-24 17:49
谢谢这个兄台!
作者: rain_fish 发布时间: 2010-08-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28