扩展库 / 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。