|
🛰️航天仿真算法库 SpaceAST 0.3.1
|
#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() 判断资源是否已被占用。
特点:
注意:
使用示例:
|
explicit |
构造锁,关联锁文件
| path | 锁文件路径(UTF-8) |
| errc_t ast::FileLock::lock | ( | ELockMode | mode = ELockMode::eExclusive | ) |
阻塞加锁,直到获得锁为止
锁文件在构造时打开;本函数会一直等待,直到获得锁为止
| mode | 锁模式,默认排他锁 |
| errc_t ast::FileLock::tryLock | ( | double | timeoutSeconds, |
| ELockMode | mode = ELockMode::eExclusive ) |
带超时的加锁,在 timeoutSeconds 秒内反复尝试
在超时前反复尝试
| timeoutSeconds | 最长等待时间 [s],小于等于 0 时只尝试一次 |
| mode | 锁模式,默认排他锁 |
| errc_t ast::FileLock::tryLock | ( | ELockMode | mode = ELockMode::eExclusive | ) |
非阻塞加锁
| mode | 锁模式,默认排他锁 |