IProcessLocker.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. 
  2. namespace SKMC.Api.Process.Control
  3. {
  4. /// <summary>
  5. /// <para>流程锁</para>
  6. /// <para>适用于多个执行单元需要互锁的场景</para>
  7. /// </summary>
  8. public interface IProcessLocker
  9. {
  10. /// <summary>
  11. /// <para>尝试获取流程锁, 如果锁已被占用则会持续阻塞</para>
  12. /// <para>如果返回true表示获取锁成功, 可继续执行后续代码</para>
  13. /// <para>如果返回false表示获取锁失败, 可能是有线程执行了ExitLock让该锁失效</para>
  14. /// <para>注意:如果获取锁失败, 同样也会执行后续代码可能导致锁定失败! 需要对该返回值进行判断处理</para>
  15. /// </summary>
  16. /// <param name="handler">尝试获取锁的对象Id, 如果不传对象Id默认为-1表示公共对象</param>
  17. /// <returns>true: 成功获取锁, false: 锁已失效</returns>
  18. bool StartLock(int handler = -1);
  19. /// <summary>
  20. /// <para>归还/重置流程锁, 任何线程均可执行</para>
  21. /// <para>如果尝试释放锁的对象Id不为当前占用锁的对象Id则释放无效</para>
  22. /// </summary>
  23. /// <param name="handler">尝试释放锁的对象Id, 如果不传对象Id默认为-1表示公共对象</param>
  24. void EndLock(int handler = -1);
  25. /// <summary>
  26. /// <para>退出锁并让所有执行了StartLock正在阻塞的线程都释放并返回获取锁结果为false</para>
  27. /// <param name="handler">尝试释放锁的对象Id, 如果不传对象Id默认为-1表示公共对象</param>
  28. /// </summary>
  29. void ExitLock(int handler = -1);
  30. /// <summary>
  31. /// 强制退出锁(忽略锁的占用对象)并重置锁状态
  32. /// </summary>
  33. void ResetLock();
  34. }
  35. }