什么时候在glibc中发生文件流锁定?

问题描述:

阅读glibc文档后,我最近了解到getc的调用可能需要等待获取锁来读取文件。我想验证在使用缓冲时,只有在需要读取实际文件以补充缓冲区时才会获取锁定。什么时候在glibc中发生文件流锁定?

谢谢!

getc调用的锁提供了对stdio FILE对象的应用程序级锁定,以允许同一应用程序中的多个线程对同一FILE对象进行线程安全访问。因此,每次读取字符时需要获取,,而不仅仅是在补充缓冲区时。

但是,如果您不是从多个线程访问文件,则永远不必等待锁定。如果获取/释放锁的开销过大(测量此;不要只假设),您还可以选择使用flockfilefunlockfile手动锁定/解锁,然后使用getc_unlocked

+0

没有任何理由使用`flockfile`和`funlockfile`,除非你有多个线程试图访问相同的`FILE`(这几乎肯定是一个错误,除非它像打印文本那样输出一整行时间)。 – 2011-02-01 05:33:58