在Go语言中,互斥锁(Mutex)是一种用于保护共享资源的同步原语
首先,我们需要导入相关的包并创建一个测试文件,例如mutex_test.go
。在这个文件中,我们将编写一个简单的测试函数来测试互斥锁的性能。
package main
import (
"sync"
"testing"
)
func TestMutexPerformance(t *testing.T) {
var wg sync.WaitGroup
numWorkers := 100
numIterations := 100000
wg.Add(numWorkers)
for i := 0; i < numWorkers; i++ {
go func() {
defer wg.Done()
for j := 0; j < numIterations; j++ {
mu.Lock()
// 模拟对共享资源的访问
mu.Unlock()
}
}()
}
wg.Wait()
}
在这个测试函数中,我们创建了100个工作线程,每个线程将对共享资源进行100,000次访问。我们使用sync.WaitGroup
来等待所有线程完成。
要运行这个测试,你可以在命令行中输入以下命令:
go test -bench .
这将运行所有的基准测试,并输出性能结果。在输出中,你可以找到类似于mutex_test.TestMutexPerformance-8 1000000000 0.276 ns/op
的行,这表示每个操作的平均执行时间为0.276纳秒。
请注意,互斥锁的性能可能受到多种因素的影响,例如操作系统、硬件和Go运行时版本。因此,你可能需要根据你的具体环境调整测试参数以获得更准确的结果。