当前位置: 技术问答>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的事情.