首页 > 技术文章 > FILE对象线程安全

Focus-Flying 2017-09-12 20:05 原文

根据apue讲述: 
    标准的IO例程可能从它们各自的内部数据结构的角度出发,是以线程安全的方式实现的!但在线程中,如果标准
    IO例程都获取它们各自的锁,那么在做一次一个字符的IO时就会出现严重的性能下降!在这种情况下,需要对每
    一个字符的读写操作进行读取锁和释放锁的动作!而如果使用flockfile和ftrylockfile函数获得给定FILE
    对象关联的锁,并在flockfile(或ftrylockfile)和funlockfile的调用包围中调用不加锁版本的基于字
    符的标准IO例程,这可以避免这种开销!(FILE的锁是递归的!占有这把锁的时候,还是可以再次获取该锁)

相关函数:
    #include <stdio.h>

       void flockfile(FILE *filehandle);
       int ftrylockfile(FILE *filehandle);
       void funlockfile(FILE *filehandle);

    int getc_unlocked(FILE *stream);
       int getchar_unlocked(void);
       int putc_unlocked(int c, FILE *stream);
       int putchar_unlocked(int c);

推荐阅读