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(文件结尾)

发布了140 篇原创文章 · 获赞 28 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_16097611/article/details/79487768
今日推荐