当前位置: 技术问答>linux和unix
关于标准输出的缓冲造成的死锁
来源: 互联网 发布时间:2016-02-12
本文导语: UNIX环境高级变成第2版众,例程8,9,10得到个结论说: 问题出在系统默认的标准I/O缓存机制上。当程序10被调用时,对标准输入的第一个fgets引起标准I / O库分配一个缓存,并选择缓存的类型。因为标准输入是个管...
UNIX环境高级变成第2版众,例程8,9,10得到个结论说:
问题出在系统默认的标准I/O缓存机制上。当程序10被调用时,对标准输入的第一个fgets引起标准I / O库分配一个缓存,并选择缓存的类型。因为标准输入是个管道,所以isatty为假,于是标准I/O库由系统默认是全缓存的。对标准输出也有同样的处理。当add2从其标准输入读取而发生堵塞时,程序9从管道读时也发生堵塞,于是产生了死锁。
为什么add2堵塞了,程序9(应该是父进程吧)从管道度也发生了堵塞?
有没有人能更详细地说明一下?
问题出在系统默认的标准I/O缓存机制上。当程序10被调用时,对标准输入的第一个fgets引起标准I / O库分配一个缓存,并选择缓存的类型。因为标准输入是个管道,所以isatty为假,于是标准I/O库由系统默认是全缓存的。对标准输出也有同样的处理。当add2从其标准输入读取而发生堵塞时,程序9从管道读时也发生堵塞,于是产生了死锁。
为什么add2堵塞了,程序9(应该是父进程吧)从管道度也发生了堵塞?
有没有人能更详细地说明一下?
|
自己解决了.
|
这是程序自己的逻辑死锁.不管标准io的事情.
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。