🛰️航天仿真算法库 SpaceAST 0.3.1
载入中...
搜索中...
未找到
ast::FileLock类 参考

#include <FileLock.hpp>

类

class  Impl
 

Public 类型

enum  ELockMode { eExclusive , eShared }
 
enum  ELockResult { eLocked =0 , eBusy =eErrorBusy , eError =-1 }
 

Public 成员函数

 FileLock (StringView path)
 
 ~FileLock ()
 
errc_t lock (ELockMode mode=ELockMode::eExclusive)
 
errc_t tryLock (ELockMode mode=ELockMode::eExclusive)
 
errc_t tryLock (double timeoutSeconds, ELockMode mode=ELockMode::eExclusive)
 
errc_t unlock ()
 

详细描述

跨进程文件锁

用于协调多个进程(或同一进程内的多个句柄)对同一资源的访问: 持锁方在锁文件上持有一把操作系统级的 advisory 锁,其它进程通过 tryLock() 判断资源是否已被占用。

特点:

  • RAII:析构时自动解锁并关闭句柄;
  • 进程异常退出(崩溃、被强杀)时锁由内核自动释放,不会留下死锁;
  • 锁文件本身保留:构造时打开(不存在则创建),残留的空文件会被后续复用;
  • 锁是建议性的(advisory):不阻止其它进程直接读写该文件。

注意:

  • 路径按 UTF-8 解释;锁文件所在目录必须已存在(不会自动创建);
  • 一个 FileLock 对象对应一把锁,对象本身不是线程安全的;

使用示例:

FileLock lock("data/.update.lock");
if (lock.tryLock() == eNoError) {
// 独占访问 data 目录,lock 析构或进程退出时自动解锁
} else {
// 已有其它进程在更新数据
}
跨进程文件锁
定义 FileLock.hpp:64
errc_t lock(ELockMode mode=ELockMode::eExclusive)
阻塞加锁,直到获得锁为止
定义 FileLock.cpp:277

成员枚举类型说明

◆ ELockMode

文件锁模式

枚举值
eExclusive 

排他锁:同一时刻只允许一个持有者

eShared 

共享锁:允许多个持有者同时持有,与排他锁互斥

◆ ELockResult

加锁结果

枚举值
eLocked 

成功获得锁

eBusy 

锁已被其它句柄占用(非阻塞加锁或等待超时)

eError 

打开锁文件或加锁失败,具体原因见日志

构造及析构函数说明

◆ FileLock()

ast::FileLock::FileLock ( StringView path)
explicit

构造锁,关联锁文件

参数
path锁文件路径(UTF-8)

成员函数说明

◆ lock()

errc_t ast::FileLock::lock ( ELockMode mode = ELockMode::eExclusive)

阻塞加锁,直到获得锁为止

锁文件在构造时打开;本函数会一直等待,直到获得锁为止

参数
mode锁模式,默认排他锁

◆ tryLock() [1/2]

errc_t ast::FileLock::tryLock ( double timeoutSeconds,
ELockMode mode = ELockMode::eExclusive )

带超时的加锁,在 timeoutSeconds 秒内反复尝试

在超时前反复尝试

参数
timeoutSeconds最长等待时间 [s],小于等于 0 时只尝试一次
mode锁模式,默认排他锁

◆ tryLock() [2/2]

errc_t ast::FileLock::tryLock ( ELockMode mode = ELockMode::eExclusive)

非阻塞加锁

参数
mode锁模式,默认排他锁

该类的文档由以下文件生成: