lockfile

package
v0.8.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 24, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

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

func PID

func PID(configDir string) int

PID 读取锁文件中记录的进程 PID。 仅在锁未被持有时有意义(用于调试,判断谁持有了锁)。 返回 0 表示无法读取(文件不存在或格式错误)。

Types

type Lock

type Lock struct {
	// contains filtered or unexported fields
}

Lock 表示一个排他文件锁。 调用方在不再需要锁时必须调用 Close 释放。

func LockDB added in v0.8.1

func LockDB(dbName string) (*Lock, error)

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

func TryLockGlobal() (*Lock, bool, error)

TryLockGlobal 获取全局级排他锁。 锁文件位于 ~/.dscli/locks/dscli.lock。

func TryLockLocal

func TryLockLocal() (*Lock, bool, error)

TryLockLocal 获取项目级排他锁。 使用 context.ProjectRoot 确定项目根目录, 锁文件位于 <projectDir>/.dscli/locks/dscli.lock。

func (*Lock) Close

func (l *Lock) Close() error

Close 释放锁并关闭文件。

Source Files

  • lockfile.go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL