gpt4 book ai didi

go - 当阻塞的 goroutine 的 RWMutex Unlock 被唤醒时

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:08 27 4
gpt4 key购买 nike

var mu sync.RWMutex

//goroutine 1
go func() {
mu.Lock()
defer mu.Unlock()
//something else
}()
//goroutine 2
go func() {
mu.Lock()
defer mu.Unlock()
//something else
}()
//goroutine 3
go func() {
mu.RLock()
defer mu.RUnlock()
//something else
}()
//goroutine 4
go func() {
mu.RLock()
defer mu.RUnlock()
//something else
}()

goroutine 1 现在获得锁,goroutine 2,3,4 被阻塞。当goroutine 1 释放锁时,哪个goroutine 会先被唤醒?随机?

最佳答案

为确保锁最终对写入者可用,阻塞的 Lock 调用会阻止新读取者获取锁。如果 goroutine 2 在 Lock 上阻塞在 goroutine 3 在 RLock 上阻塞,则 goroutine 2 将在 goroutine 3 之前运行。如果 goroutine 3 在 RLock 上阻塞,则执行顺序未指定Lock 上的 goroutine 2 block 之前。

关于go - 当阻塞的 goroutine 的 RWMutex Unlock 被唤醒时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com