github.com/zhongdalu/gf@v1.0.0/g/os/gmutex/gmutex_bench_test.go (about) 1 // Copyright 2019 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/zhongdalu/gf. 6 7 package gmutex_test 8 9 import ( 10 "sync" 11 "testing" 12 13 "github.com/zhongdalu/gf/g/os/gmutex" 14 ) 15 16 var ( 17 mu = sync.Mutex{} 18 rwmu = sync.RWMutex{} 19 gmu = gmutex.New() 20 ) 21 22 func Benchmark_Mutex_LockUnlock(b *testing.B) { 23 b.RunParallel(func(pb *testing.PB) { 24 for pb.Next() { 25 mu.Lock() 26 mu.Unlock() 27 } 28 }) 29 } 30 31 func Benchmark_RWMutex_LockUnlock(b *testing.B) { 32 b.RunParallel(func(pb *testing.PB) { 33 for pb.Next() { 34 rwmu.Lock() 35 rwmu.Unlock() 36 } 37 }) 38 } 39 40 func Benchmark_RWMutex_RLockRUnlock(b *testing.B) { 41 b.RunParallel(func(pb *testing.PB) { 42 for pb.Next() { 43 rwmu.RLock() 44 rwmu.RUnlock() 45 } 46 }) 47 } 48 49 func Benchmark_GMutex_LockUnlock(b *testing.B) { 50 b.RunParallel(func(pb *testing.PB) { 51 for pb.Next() { 52 gmu.Lock() 53 gmu.Unlock() 54 } 55 }) 56 } 57 58 func Benchmark_GMutex_TryLock(b *testing.B) { 59 b.RunParallel(func(pb *testing.PB) { 60 for pb.Next() { 61 if gmu.TryLock() { 62 defer gmu.Unlock() 63 } 64 } 65 }) 66 } 67 68 func Benchmark_GMutex_RLockRUnlock(b *testing.B) { 69 b.RunParallel(func(pb *testing.PB) { 70 for pb.Next() { 71 gmu.RLock() 72 gmu.RUnlock() 73 } 74 }) 75 } 76 77 func Benchmark_GMutex_TryRLock(b *testing.B) { 78 b.RunParallel(func(pb *testing.PB) { 79 for pb.Next() { 80 gmu.TryRLock() 81 } 82 }) 83 }