fwrite是否在内部调用任何锁?

时间:2010-09-10 13:52:22

标签: c file io fwrite

在solaris中,当我将dbx连接到其中一个正在运行的堆栈时,我发现调用fwrite导致__lll_lock_wait()?

在什么情况下会发生这种情况? fwrite内部是否尝试获取锁?

1 个答案:

答案 0 :(得分:2)

我查看的标准(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时,你可能会产生完全混乱的输出,例如