summaryrefslogtreecommitdiff
path: root/src/pkg/sync/mutex_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/sync/mutex_test.go')
-rw-r--r--src/pkg/sync/mutex_test.go50
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;
+}