在Solaris 中,当我将dbx 连接到正在运行的堆栈之一时,我发现对fwrite 的调用导致了__lll_lock_wait()?
什么情况下会发生这种情况? fwrite 是否在内部尝试获取锁?
我查看的标准(C99 和 POSIX)没有提及有关锁定或解锁 IO 的内容fwrite
.
在我的 Linux 系统上,他们没有非常精确地提到锁定man
page:
For non-locking counterparts, see unlocked_stdio(3).
并且有效地,有一个fwrite_unlocked
功能。 POSIX 中的标准解锁函数仅getc_unlocked()
, getchar_unlocked()
, putc_unlocked()
, and putchar_unlocked()
.
我的解释是,可能 man(3) 集中的所有缓冲 IO 都被锁定,并且您只有很少的标准化接口来执行解锁 IO。
这些东西在线程之间锁定确实是一件好事,否则当多个线程写入时,您可能会得到完全混乱的输出stderr
, e.g.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)