diff options
Diffstat (limited to 'src/pkg/sync/mutex_test.go')
| -rw-r--r-- | src/pkg/sync/mutex_test.go | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/src/pkg/sync/mutex_test.go b/src/pkg/sync/mutex_test.go index 72c9c4342..05fef786a 100644 --- a/src/pkg/sync/mutex_test.go +++ b/src/pkg/sync/mutex_test.go @@ -12,8 +12,8 @@ import ( "testing"; ) -func HammerSemaphore(s *uint32, cdone chan bool) { - for i := 0; i < 1000; i++ { +func HammerSemaphore(s *uint32, loops int, cdone chan bool) { + for i := 0; i < loops; i++ { runtime.Semacquire(s); runtime.Semrelease(s); } @@ -25,16 +25,36 @@ func TestSemaphore(t *testing.T) { *s = 1; c := make(chan bool); for i := 0; i < 10; i++ { - go HammerSemaphore(s, c) + go HammerSemaphore(s, 1000, c) } for i := 0; i < 10; i++ { <-c } } +func BenchmarkUncontendedSemaphore(b *testing.B) { + s := new(uint32); + *s = 1; + HammerSemaphore(s, b.N, make(chan bool, 2)); +} + +func BenchmarkContendedSemaphore(b *testing.B) { + b.StopTimer(); + s := new(uint32); + *s = 1; + c := make(chan bool); + runtime.GOMAXPROCS(2); + b.StartTimer(); + + go HammerSemaphore(s, b.N/2, c); + go HammerSemaphore(s, b.N/2, c); + <-c; + <-c; +} -func HammerMutex(m *Mutex, cdone chan bool) { - for i := 0; i < 1000; i++ { + +func HammerMutex(m *Mutex, loops int, cdone chan bool) { + for i := 0; i < loops; i++ { m.Lock(); m.Unlock(); } @@ -45,9 +65,27 @@ func TestMutex(t *testing.T) { m := new(Mutex); c := make(chan bool); for i := 0; i < 10; i++ { - go HammerMutex(m, c) + go HammerMutex(m, 1000, c) } for i := 0; i < 10; i++ { <-c } } + +func BenchmarkUncontendedMutex(b *testing.B) { + m := new(Mutex); + HammerMutex(m, b.N, make(chan bool, 2)); +} + +func BenchmarkContendedMutex(b *testing.B) { + b.StopTimer(); + m := new(Mutex); + c := make(chan bool); + runtime.GOMAXPROCS(2); + b.StartTimer(); + + go HammerMutex(m, b.N/2, c); + go HammerMutex(m, b.N/2, c); + <-c; + <-c; +} |
