You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mutex.go 735 B

5 months ago
6 months ago
6 months ago
6 months ago
6 months ago
12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package publock
  2. import (
  3. "time"
  4. "gitlink.org.cn/cloudream/jcs-pub/client/internal/publock/reqbuilder"
  5. "gitlink.org.cn/cloudream/jcs-pub/client/internal/publock/types"
  6. )
  7. type Mutex struct {
  8. pub *PubLock
  9. locked LockedRequest
  10. }
  11. func (m *Mutex) Unlock() {
  12. m.pub.Release(m.locked.ReqID)
  13. }
  14. type MutexBuilder struct {
  15. reqbuilder.LockRequestBuilder[*MutexBuilder]
  16. pub *PubLock
  17. }
  18. func (b *MutexBuilder) Lock(opts ...AcquireOptionFn) (*Mutex, error) {
  19. var opt = types.AcquireOption{
  20. Timeout: time.Second * 10,
  21. }
  22. for _, fn := range opts {
  23. fn(&opt)
  24. }
  25. lkd, err := b.pub.Acquire(types.LockRequest{
  26. Locks: b.Locks,
  27. }, opt)
  28. if err != nil {
  29. return nil, err
  30. }
  31. return &Mutex{
  32. pub: b.pub,
  33. locked: lkd,
  34. }, nil
  35. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。