mirror of https://github.com/jetkvm/kvm.git
93 lines
1.6 KiB
Go
93 lines
1.6 KiB
Go
//go:build !synctrace
|
|
|
|
package sync
|
|
|
|
import (
|
|
gosync "sync"
|
|
)
|
|
|
|
// Mutex is a wrapper around the sync.Mutex
|
|
type Mutex struct {
|
|
mu gosync.Mutex
|
|
}
|
|
|
|
// Lock locks the mutex
|
|
func (m *Mutex) Lock() {
|
|
m.mu.Lock()
|
|
}
|
|
|
|
// Unlock unlocks the mutex
|
|
func (m *Mutex) Unlock() {
|
|
m.mu.Unlock()
|
|
}
|
|
|
|
// TryLock tries to lock the mutex
|
|
func (m *Mutex) TryLock() bool {
|
|
return m.mu.TryLock()
|
|
}
|
|
|
|
// RWMutex is a wrapper around the sync.RWMutex
|
|
type RWMutex struct {
|
|
mu gosync.RWMutex
|
|
}
|
|
|
|
// Lock locks the mutex
|
|
func (m *RWMutex) Lock() {
|
|
m.mu.Lock()
|
|
}
|
|
|
|
// Unlock unlocks the mutex
|
|
func (m *RWMutex) Unlock() {
|
|
m.mu.Unlock()
|
|
}
|
|
|
|
// RLock locks the mutex for reading
|
|
func (m *RWMutex) RLock() {
|
|
m.mu.RLock()
|
|
}
|
|
|
|
// RUnlock unlocks the mutex for reading
|
|
func (m *RWMutex) RUnlock() {
|
|
m.mu.RUnlock()
|
|
}
|
|
|
|
// TryRLock tries to lock the mutex for reading
|
|
func (m *RWMutex) TryRLock() bool {
|
|
return m.mu.TryRLock()
|
|
}
|
|
|
|
// TryLock tries to lock the mutex
|
|
func (m *RWMutex) TryLock() bool {
|
|
return m.mu.TryLock()
|
|
}
|
|
|
|
// WaitGroup is a wrapper around the sync.WaitGroup
|
|
type WaitGroup struct {
|
|
wg gosync.WaitGroup
|
|
}
|
|
|
|
// Add adds a function to the wait group
|
|
func (w *WaitGroup) Add(delta int) {
|
|
w.wg.Add(delta)
|
|
}
|
|
|
|
// Done decrements the wait group counter
|
|
func (w *WaitGroup) Done() {
|
|
w.wg.Done()
|
|
}
|
|
|
|
// Wait waits for the wait group to finish
|
|
func (w *WaitGroup) Wait() {
|
|
w.wg.Wait()
|
|
}
|
|
|
|
// Once is a wrapper around the sync.Once
|
|
type Once struct {
|
|
mu gosync.Once
|
|
}
|
|
|
|
// Do calls the function f if and only if Do has not been called before for this instance of Once.
|
|
func (o *Once) Do(f func()) {
|
|
o.mu.Do(f)
|
|
}
|