namespace SKMC.Api.Process.Control { /// /// 流程锁 /// 适用于多个执行单元需要互锁的场景 /// public interface IProcessLocker { /// /// 尝试获取流程锁, 如果锁已被占用则会持续阻塞 /// 如果返回true表示获取锁成功, 可继续执行后续代码 /// 如果返回false表示获取锁失败, 可能是有线程执行了ExitLock让该锁失效 /// 注意:如果获取锁失败, 同样也会执行后续代码可能导致锁定失败! 需要对该返回值进行判断处理 /// /// 尝试获取锁的对象Id, 如果不传对象Id默认为-1表示公共对象 /// true: 成功获取锁, false: 锁已失效 bool StartLock(int handler = -1); /// /// 归还/重置流程锁, 任何线程均可执行 /// 如果尝试释放锁的对象Id不为当前占用锁的对象Id则释放无效 /// /// 尝试释放锁的对象Id, 如果不传对象Id默认为-1表示公共对象 void EndLock(int handler = -1); /// /// 退出锁并让所有执行了StartLock正在阻塞的线程都释放并返回获取锁结果为false /// 尝试释放锁的对象Id, 如果不传对象Id默认为-1表示公共对象 /// void ExitLock(int handler = -1); /// /// 强制退出锁(忽略锁的占用对象)并重置锁状态 /// void ResetLock(); } }