扩展库 / singleinstance

singleinstance

按名称互斥的实例锁;同名进程与同进程的独立包实例不能同时持有。

支持 UTF-8 名称与进程退出自动解锁。Windows 使用 XRT 文件锁,POSIX 使用按打开句柄隔离的文件锁。2026-10-26 Windows/Linux 的严格 C、中文名称子进程互斥、Linux 独立包实例及双语范例独立 EXE AOT 均通过固定输出门禁;测试使用隔离主目录。但真实双 XL_Context 并发执行在 Linux 有界测试中仍被共享 DLL 执行边界阻断,Linux 默认门禁保持红色,整包不签收发布级。深主目录长路径也尚待收口。

API

入口用途
acquire(name) as bool成功为 true;同名进程占用为 false;XLang 名称含 NUL 或其他输入错误抛异常
release()解锁,允许重复调用
isAcquired() as bool查询当前包实例是否持锁

xlang

import singleinstance
if not singleinstance.acquire("my_app") then
    return 1
end
// 应用工作
singleinstance.release()

C 与生命周期

C 头文件 include/singleinstance_native.h;xsi_acquire 用 1/0/-1 区分取得/占用/错误。每个包实例只能持有一个锁;释放脚本上下文前应显式 release()。锁文件保留在用户主目录,不能以文件存在判断是否持锁。已有锁目录若为符号链接或 POSIX 权限过宽,获取锁会报错;Windows 继承 ACL 不做完整审计。完整路径规则与验证范围见包内 README。