fwrite是否在内部调用任何锁?
在solaris中,当我将dbx连接到其中一个正在运行的堆栈时,我发现调用fwrite导致__lll_lock_wait()?
在什么情况下会发生这种情况? fwrite内部是否尝试获取锁定?
我查看的标准(C99和POSIX)对fwrite
锁定或解锁IO没有任何说明。
在我的linux系统上,他们在man
页中没有非常精确地提到锁定:
For non-locking counterparts, see unlocked_stdio(3).
实际上,有一个fwrite_unlocked
函数。 POSIX中的标准解锁函数只有getc_unlocked()
, getchar_unlocked()
, putc_unlocked()
和putchar_unlocked()
。
我的解释是,man(3)集中的所有缓冲IO都可能被锁定,并且您只有很少的标准化接口来执行解锁IO。
这些东西在线程之间锁定是一件好事,因为否则当几个线程写入stderr
时你可能会有完全混乱的输出,例如