| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| func BenchmarkSemaUncontended(b *testing.B) { |
| b.RunParallel(func(pb *testing.PB) { |
| Runtime_Semrelease(&sem.sem) |
| Runtime_Semacquire(&sem.sem) |
| func benchmarkSema(b *testing.B, block, work bool) { |
| for p := 0; p < runtime.GOMAXPROCS(0)/2; p++ { |
| b.RunParallel(func(pb *testing.PB) { |
| for i := 0; i < 100; i++ { |
| func BenchmarkSemaSyntNonblock(b *testing.B) { |
| benchmarkSema(b, false, false) |
| func BenchmarkSemaSyntBlock(b *testing.B) { |
| benchmarkSema(b, true, false) |
| func BenchmarkSemaWorkNonblock(b *testing.B) { |
| benchmarkSema(b, false, true) |
| func BenchmarkSemaWorkBlock(b *testing.B) { |
| benchmarkSema(b, true, true) |