zoukankan      html  css  js  c++  java
  • 记录锁

    1 记录锁的功能:

    当一个进程正在读或修改文件的某一区域时,可以阻止其他进程修改同一文件区

    2 相关数据结构:

    struct flock
    {
      short  l_type;/* F_RDLCK,F_WRLCK,F_UNLCK */ 
      off_t  l_start;/* offset in bytes,relative to l_whence */
      short  l_whence;/* SEEK_SET,SEEK_CUR,SEEK_END */
      off_t  l_len; /* length,in bytes;0 means lock to EOF */
      pid_t  l_pid;/* returned with F_GETLK */
    }

    3 相关函数:

    #include <fcntl.h>
    int fcntl(int filedes,int cmd,.../* struct flock *flockptr */

    F_GETLK:判断flockptr是否会被其他记录锁排斥,会则将排斥该锁的锁信息填充到flockptr,不排斥则将l_type设置为F_UNLCK

    F_SETLK:尝试建立flockptr描述的文件锁,非阻塞

    F_SETLKW:建立文件锁的阻塞版本

    4 隐含继承与释放:

    1)记录锁与文件了进程两方面相关,进程终止则该进程建立的所有记录锁释放,文件描述符关闭则该文件上所有记录锁释放

    2)fork子进程不继承父进程的记录锁(父子进程如果拥有相同的记录锁,记录锁就失去意义了)

    3)exec后,新程序继承原程序的记录锁

    5 系统中的实现

    对任意一个文件描述符执行关闭操作都会释放文件上的所有记录锁(为什么??)

  • 相关阅读:
    nyoj 311 完全背包
    nyoj 737 石子合并(一)
    nyoj 232 How to eat more Banana
    nyoj 456 邮票分你一半
    nyoj 236 心急的C小加
    nyoj 195 飞翔
    nyoj 201 作业题
    SOS 调试扩展 (SOS.dll)
    使用Windbg和SoS扩展调试分析.NET程序
    windbg命令分类与概述
  • 原文地址:https://www.cnblogs.com/buptlyn/p/4178418.html
Copyright © 2011-2022 走看看