码迷,mamicode.com
首页 > 其他好文 > 详细

getc_unlocked,putc_unlocked,getchar_unlocked,putchar_unlocked

时间:2018-07-14 20:02:33      阅读:490      评论:0      收藏:0      [点我收藏+]

标签:get   避免   其他   细节   操作   控制   flock   char   必须   

getc_unlocked和putc_unlocked

int getc_unlocked(FILE *stream); 
int putc_unlocked(int c,FILE *stream);

标准输入输出库 stdio 函数是线程安全的。这是通过为每个文件对象 FILE 赋予一个锁定计数和 (当锁定计数非零时) 一个所有者线程来实现的。对每个库函数调用,这些函数等待直到文件对象 FILE 不再被一个不同的线程锁定,然后锁定它,进行所需的 I/O 操作,再次对它解锁。(注意:这个锁定与由函数flock 和lockf实现的锁定无关。) 

所有这些操作对 C 程序员来说都是不可见的,但是有两种理由,需要进行更加细节的控制。其一,也许某个线程需要进行不可分割的一系列 I/O 操作,不应当被其他线程的 I/O 所终端。其二,出于效率因素,应当避免进行过多的锁定来提高效率。 

为此,一个线程可以显式地锁定文件对象 FILE,接着进行它的一系列 I/O 操作,然后解锁。这样可以避免其他线程干扰。如果这样做的原因是需要达到更高的效率,应当使用 stdio 函数的非锁定版本来进行 I/O 操作:使用 getc_unlocked() 和 putc_unlocked() 来代替 getc() 和 putc()。 

getchar_unlocked和putchar_unlocked

int getchar_unlocked(void);
int putchar_unlocked(int c);

getc_unlocked(),putc_unlocked(),getchar_unlocked(),putchar_unlocked()不执行任何锁操作,因此你必须知道这些操作附近使用flockfile和funlockfile,如果你想要读写单个字符,通常该使用加锁的变量而非锁住文件流,

调用新的解锁的get或put然后解锁文件流。

尽管putchar内部被同步已确保stdio缓冲区不被破坏,但是单个字符以任意顺序出现

 

getc_unlocked,putc_unlocked,getchar_unlocked,putchar_unlocked

标签:get   避免   其他   细节   操作   控制   flock   char   必须   

原文地址:https://www.cnblogs.com/tianzeng/p/9310760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!