try_locker.go 361 B

12345678910111213141516171819202122232425262728
  1. package polling
  2. type Locker struct {
  3. locker chan struct{}
  4. }
  5. func NewLocker() *Locker {
  6. return &Locker{
  7. locker: make(chan struct{}, 1),
  8. }
  9. }
  10. func (l *Locker) Lock() {
  11. l.locker <- struct{}{}
  12. }
  13. func (l *Locker) TryLock() bool {
  14. select {
  15. case l.locker <- struct{}{}:
  16. return true
  17. default:
  18. return false
  19. }
  20. }
  21. func (l *Locker) Unlock() {
  22. <-l.locker
  23. }