2020-04-24 22:09:05 +00:00
|
|
|
package moreatomic
|
|
|
|
|
2020-05-06 07:20:25 +00:00
|
|
|
import "sync"
|
2020-04-24 22:09:05 +00:00
|
|
|
|
|
|
|
type BusyMutex struct {
|
|
|
|
busy Bool
|
2020-05-06 07:20:25 +00:00
|
|
|
mut sync.Mutex
|
2020-04-24 22:09:05 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (m *BusyMutex) TryLock() bool {
|
|
|
|
if m.busy.Get() {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
m.mut.Lock()
|
|
|
|
m.busy.Set(true)
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *BusyMutex) IsBusy() bool {
|
|
|
|
return m.busy.Get()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *BusyMutex) Lock() {
|
|
|
|
m.mut.Lock()
|
|
|
|
m.busy.Set(true)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *BusyMutex) Unlock() {
|
|
|
|
m.busy.Set(false)
|
|
|
|
m.mut.Unlock()
|
|
|
|
}
|