Documentation
¶
Overview ¶
Package lockfile 提供项目级与全局级文件锁。
基于 flock(2) 实现,进程退出或文件关闭时内核自动释放锁, 无残留问题。Linux 与 macOS 均支持。
用法 ¶
// 项目级锁
lk, ok, err := lockfile.TryLockLocal()
if ok {
defer lk.Close()
// 持有锁,执行主逻辑
}
// 全局锁
lk, ok, err := lockfile.TryLockGlobal()
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Lock ¶
type Lock struct {
// contains filtered or unexported fields
}
Lock 表示一个排他文件锁。 调用方在不再需要锁时必须调用 Close 释放。
func LockDB ¶ added in v0.8.1
LockDB 获取数据库排他锁(阻塞等待)。
锁文件位于 ~/.dscli/locks/sqlite.db.lock,与 chat 进程锁 (dscli.lock) 独立。调用方负责 Close 释放;进程退出时 内核自动释放。
用于消除多进程并发访问 sqlite.db 时的 SQLITE_BUSY 错误。 LockDB 获取指定数据库文件名的文件锁(阻塞排他锁)。
dbName 如 "sqlite.db" 或 "wechat.db", 锁文件路径为 ~/.dscli/locks/<dbName>.lock。
func TryLockGlobal ¶
TryLockGlobal 获取全局级排他锁。 锁文件位于 ~/.dscli/locks/dscli.lock。
func TryLockLocal ¶
TryLockLocal 获取项目级排他锁。 使用 context.ProjectRoot 确定项目根目录, 锁文件位于 <projectDir>/.dscli/locks/dscli.lock。
Source Files
¶
- lockfile.go
Click to show internal directories.
Click to hide internal directories.