操作系统文件锁

文件锁

文件锁的意义:
  • 当多个进程同时访问同一个文件时,就有可能造成文件的数据读写混乱,为了解决这一问题可以在读写文件前给文件尝试并加锁

文件锁的限制:
  • 一般情况下,系统提供的文件锁都是劝解锁,内核主要负责文件的加锁和检查是否上锁,而不直接参与锁的控制以及协同操作,这类锁就需要程序员每次用之前都要检查是否被别的进程加锁,再实现并发操作

int fcntl(int fd, int cmd, flock* lock );
功能:对文件的某一部分进行锁操作
struct flock {
    short l_type;  /* 锁的类型
                F_RDLCK,读锁
                F_WRLCK, 写锁
                F_UNLCK 解锁*/
   short l_whence;  /* 偏移起点
                SEEK_SET, SEEK_CUR, SEEK_END */
   off_t l_start;   /* 偏移值  锁区起始位置:l_whence+l_start */
   off_t l_len;     /* 锁区长度 0表示锁到文件末尾*/
   pid_t l_pid;     /* 加锁的进程id -1表示让内核自动设置 */
   };
cmd可选:
    F_GETLK     测试lock所表示的锁能否加锁
                如果可以加则讲lock.l_type设置为F_UNLCK
                否则会通过lock.l_type返回当前锁信息
    F_SETLK     设置文件的锁定状态为lock.l_type
                成功返回0,失败返回-1,如果有其他进程持有该锁导致加锁失败,返回EACCES or EAGAIN
    F_SETLKW    设置文件的锁定状态为lock.l_type
                成功返回0,否则一直等待,除非被其它信号打断返回-1
     

进程A:读锁 进程B:读锁 可共享

进程A:写锁 进程B:读锁 互斥

进程A:读锁 进程B:写锁 互斥

进程A:写锁 进程B:写锁 互斥

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值