|
- 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
- }
|