代码之家  ›  专栏  ›  技术社区  ›  Jay

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

  •  1
  • Jay  · 技术社区  · 14 年前

    在solaris中,当我将dbx连接到一个正在运行的堆栈时,我发现对fwrite的调用导致了\uull\u lock\u wait()?

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Jens Gustedt    14 年前

    我查看的标准(C99和POSIX)没有提到锁定或解锁IO fwrite .

    在我的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 ,例如。