根據apue講述:
標準的IO例程可能從它們各自的內部數據結構的角度出發,是以線程安全的方式實現的!但在線程中,若是標準
IO例程都獲取它們各自的鎖,那麼在作一次一個字符的IO時就會出現嚴重的性能降低!在這種狀況下,須要對每
一個字符的讀寫操做進行讀取鎖和釋放鎖的動做!而若是使用flockfile和ftrylockfile函數得到給定FILE
對象關聯的鎖,並在flockfile(或ftrylockfile)和funlockfile的調用包圍中調用不加鎖版本的基於字
符的標準IO例程,這能夠避免這種開銷!(FILE的鎖是遞歸的!佔有這把鎖的時候,仍是能夠再次獲取該鎖)
相關函數:
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);