mutex.go 662 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package perf
  2. import (
  3. "sync"
  4. "github.com/anacrolix/missinggo"
  5. )
  6. type TimedLocker struct {
  7. L sync.Locker
  8. Desc string
  9. }
  10. func (me *TimedLocker) Lock() {
  11. tr := NewTimer()
  12. me.L.Lock()
  13. tr.Mark(me.Desc)
  14. }
  15. func (me *TimedLocker) Unlock() {
  16. me.L.Unlock()
  17. }
  18. type TimedRWLocker struct {
  19. RWL missinggo.RWLocker
  20. WriteDesc string
  21. ReadDesc string
  22. }
  23. func (me *TimedRWLocker) Lock() {
  24. tr := NewTimer()
  25. me.RWL.Lock()
  26. tr.Mark(me.WriteDesc)
  27. }
  28. func (me *TimedRWLocker) Unlock() {
  29. me.RWL.Unlock()
  30. }
  31. func (me *TimedRWLocker) RLock() {
  32. tr := NewTimer()
  33. me.RWL.RLock()
  34. tr.Mark(me.ReadDesc)
  35. }
  36. func (me *TimedRWLocker) RUnlock() {
  37. me.RWL.RUnlock()
  38. }