go互斥锁正常模式和饥饿模式的区别

在 Go 语言中,互斥锁(也称为 mutex)用于在多个 goroutine 之间同步访问共享资源。互斥锁有两种模式:正常模式和饥饿模式。

正常模式下,当一个 goroutine 获取了互斥锁时,其他 goroutine 会被阻塞,直到互斥锁被释放。

饥饿模式下,当一个 goroutine 获取了互斥锁时,其他 goroutine 仍然可以尝试获取该互斥锁,但是如果它们在获取互斥锁时碰到其他 goroutine 已经占用了该互斥锁,它们会被阻塞。这意味着,如果一个 goroutine 已经占用了互斥锁,那么它将会一直保持对该互斥锁的控制,直到它自己释放该互斥锁为止。

因此,正常模式下,一个 goroutine 只会在它释放了互斥锁后,其他 goroutine 才能获取该互斥锁。而饥饿模式下,一个 goroutine 可能会一直保持对互斥锁的控制,不给其他 goroutine 机会获取该互斥锁。

一般来说,建议使用正常模式,因为它更加公平,可以避免一个 goroutine 因为占用了互斥锁而导致其他 goroutine 无法继续执行。但是,在某些情况