zoukankan      html  css  js  c++  java
  • flockfile, ftrylockfile, funlockfile

    SYNOPSIS 总览

    #include <stdio.h>
    
    void flockfile(FILE *filehandle);
    
    int ftrylockfile(FILE *filehandle);
    void funlockfile(FILE *filehandle);

    DESCRIPTION 描述

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

    (注意:这个锁定与由函数 flock(2) 和 lockf(3) 实现的锁定无关。)

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

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

    函数 flockfile() 等待 *filehandle 不再被其他的线程锁定,然后使当前线程成为 *filehandle 的所有者,然后增加锁定计数 lockcount。

    函数 funlockfile() 减少锁定计数。

    函数 ftrylockfile()flockfile() 的非锁定版本。它在其他线程拥有 *filehandle 时不做任何处理,否则取得所有权并增加锁定计数。

    RETURN VALUE 返回值

    函数 ftrylockfile() 返回零,如果成功的话 (获得了锁定);如果失败就返回非零。 

  • 相关阅读:
    DBHelper类
    户籍不在本市并已申请基本养老保险或基本医疗保险关系转移手续销户提取业务办理指南(试行)
    Android 打开/播放电脑的音频/视频文件
    (技术贴)如何鉴定绿茶婊
    Swift初探(一)
    关于android移动终端IM的一些问题
    C++中对象、引用、指针
    TextView
    新API
    开发者必备的6款源码搜索引擎
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11089205.html
Copyright © 2011-2022 走看看