lock.go 488 B

12345678910111213141516171819202122232425262728293031323334
  1. package lock
  2. import "sync"
  3. // Lock try lock
  4. type Lock struct {
  5. isLocked bool
  6. ll sync.Mutex
  7. }
  8. // NewLock generate a try lock
  9. func NewLock() *Lock {
  10. var l Lock
  11. l.isLocked = false
  12. return &l
  13. }
  14. // Lock try lock, return lock result
  15. func (l *Lock) Lock() bool {
  16. l.ll.Lock()
  17. defer l.ll.Unlock()
  18. if l.isLocked {
  19. return false
  20. }
  21. l.isLocked = true
  22. return true
  23. }
  24. // Unlock , Unlock the try lock
  25. func (l *Lock) Unlock() {
  26. l.ll.Lock()
  27. defer l.ll.Unlock()
  28. l.isLocked = false
  29. }