package publock import ( "time" "gitlink.org.cn/cloudream/jcs-pub/client/internal/publock/reqbuilder" "gitlink.org.cn/cloudream/jcs-pub/client/internal/publock/types" ) type Mutex struct { pub *PubLock locked LockedRequest } func (m *Mutex) Unlock() { m.pub.Release(m.locked.ReqID) } type MutexBuilder struct { reqbuilder.LockRequestBuilder[*MutexBuilder] pub *PubLock } func (b *MutexBuilder) Lock(opts ...AcquireOptionFn) (*Mutex, error) { var opt = types.AcquireOption{ Timeout: time.Second * 10, } for _, fn := range opts { fn(&opt) } lkd, err := b.pub.Acquire(types.LockRequest{ Locks: b.Locks, }, opt) if err != nil { return nil, err } return &Mutex{ pub: b.pub, locked: lkd, }, nil }