github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/utils/wgmutex/wg_mutex.go (about)

     1  package wgmutex
     2  
     3  import "sync"
     4  
     5  type WgMutex struct {
     6  	*sync.RWMutex
     7  	wg *sync.WaitGroup
     8  }
     9  
    10  func New(m *sync.RWMutex, wg *sync.WaitGroup) *WgMutex {
    11  	return &WgMutex{
    12  		RWMutex: m,
    13  		wg:      wg,
    14  	}
    15  }
    16  
    17  func (m *WgMutex) Lock() {
    18  	m.RWMutex.Lock()
    19  	m.wg.Wait()
    20  }
    21  
    22  func (m *WgMutex) RLock() {
    23  	m.RWMutex.RLock()
    24  	m.wg.Wait()
    25  }