首页 > linux > flock进程锁

flock进程锁

作者:bin

什么是flock进程锁:

标识唯一性的锁。

应用场景:

1、多个进程编辑同一个文件;

2、相同进程只能存在一个;

使用方法:

flock (fd, LOCK_EX|LOCK_NB);

参数

fd : 文件路径
操作类型 : flock主要三种操作类型:

 LOCK_SH,共享锁,多个进程可以使用同一把锁,常被用作读共享锁;
 LOCK_EX,排他锁,同时只允许一个进程使用,常被用作写锁;
 LOCK_UN,释放锁,同时flock也会随着进程的关闭而被自动释放掉。
 LOCK_NB,在尝试锁住该文件的时候,发现已经被其他服务锁住,会返回错误;

服务会阻塞等待直到锁被释放(进程等待):

flock(fd,LOCK_EX)

服务会返回错误发现文件已经被锁住时(返回错误码ret = -1, errno = EWOULDBLOCK ):

ret = flock(fd,LOCK_EX|LOCK_NB)

实例:

open

 bool getFlock(const string& file)
 {
     int fd = open(file.c_str(), O_CREAT|O_RDONLY, 0666);
     if (fd == -1) {
           if (errno != ENOENT) { return false; }
           string baseDir = "/";
           string path = file;
           if (testDir(baseDir, path) != 0) { return false; }
           fd = open(file.c_str(), O_CREAT|O_RDONLY, 0666);
           if (fd == -1) { return false; }
      }
      if (flock(fd, LOCK_EX | LOCK_NB) != 0) { return false; }
      return true;
 }

 

您必须 [ 登录 ] 才能发表留言!