linux 文件锁-进程间同步

一、场景

    多进程间同步除了信号量、共享内存(原子操作)同步外,还可以使用文件锁来实现。


二、实现

    linux中有两种是方式,分别是flock()函数和fcntl()函数。使用效果大致相同

    flock函数:

    fd:文件描述符

    operation:LOCK_SH(添加共享锁,相当于读锁),LOCK_EX(添加排他锁,相当于写锁),LOCK_UN(去除添加到文件的锁,解锁),

    LOCK_NB(其可以和LOCK_SH和LOCK_EX组合使用,默认单独使用LOCK_SH和LOCK_EX在没有得到锁资源的情况下,会阻塞,那么添加LOCK_NB,自然就是不阻塞,直接返回结果)

    

    fcntl函数:

    

   使用文件锁则是:

    int fcntl(int fd, int cmd, struct flock *);

   struct flock定义:


  fd:文件描述符

  cmd:F_GETLK(获取文件锁的信息,查询),F_SETLK(设置文件锁信息,加锁、解锁、默认不阻塞),F_SETLKW(设置文件锁信息,加锁、解锁、默认阻塞)

  struct flock l_type:F_RDLCK(读锁),F_WRLCK(写锁),F_UNLCK(解锁)

  struct flock l_whence:文件具体加锁的位置,使用的时候设置同一位置就可以达到加锁的效果,SEEK_SET(文件开头),SEEK_CUR(文件当前位置),SEEK_END(文件结尾)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值