在Go语言中,mutex(互斥锁)是一种用于保护共享资源的同步机制。Go语言标准库中的`sync`包提供了几种不同的mutex实现,以满足不同的使用场景。以下是常见的几种模式: 1. 普通互斥锁(Mutex):`sync.Mutex`是基本的互斥锁实现,提供了一个简单的互斥锁接口。它没有超时或限时的选项,当一个goroutine获得锁时,其他goroutine必须等待,直到锁被释放。 ```go var mu sync.Mutex func main() { mu.Lock() // 保护的代码区域 mu.Unlock() } ``` 2. 读写互斥锁(RWMutex):`sync.RWMutex`是一种读写互斥锁,支持多个goroutine同时读取共享资源,但只允许一个goroutine写入共享资源。这种锁常用于读多写少的场景,可以提高并发性能。 ```go var rwmu sync.RWMutex func main() { rwmu.Lock() // 保护的代码区域,只能有一个goroutine执行 rwmu.Unlock() // 多个goroutine可以同时读取,不受锁限制 rwmu.RLock() // 读取的代码区域 rwmu.RUnlock() } ``` 3. 延迟互斥锁(DelayMutex):`sync.DelayMutex`是一种延迟互斥锁,允许在一定时间间隔内重试获取锁。这对于解决goroutine阻塞问题非常有用,特别是当其他goroutine持有锁的时间较长时。 ```go var dm sync.DelayMutex func main() { dm.Lock() // 保护的代码区域 time.Sleep(1 * time.Second) // 假设这里需要等待一段时间 dm.Unlock() } ``` [2023-11-09 18:16:17 | AI问答 | 414点数解答]