【数媒在线课堂】为什么重复解锁要 panic

【数媒在线课堂】为什么重复解锁要 panic

可能你会想,为什么 Go 不能实现得更健壮些,多次执行 Unlock () 也不要 panic?

仔细想想 Unlock 的逻辑就可以理解,这实际上很难做到。Unlock 过程分为将 Locked 置为 0,然后判断 Waiter 值,如果值 > 0,则释放信号量。

如果多次 Unlock (),那么可能每次都释放一个信号量,这样会唤醒多个协程,多个协程唤醒后会继续在 Lock () 的逻辑里抢锁,势必会增加 Lock () 实现的复杂度,也会引起不必要的协程切换。

Woken 状态

Woken 状态用于加锁和解锁过程的通信,举个例子,同一时刻,两个协程一个在加锁,一个在解锁,在加锁的协程可能在自旋过程中,此时把 Woken 标记为 1,用于通知解锁协程不必释放信号量了,好比在说:你只管解锁好了,不必释放信号量,我马上就拿到锁了。

返回搜狐,查看更多

🎯 相关推荐

Unicdoe【真正的完整码表】对照表(二)
(0755) 3656 3788

Unicdoe【真正的完整码表】对照表(二)

📅 01-18 👀 7580
《方舟 生存進化》南方巨獸龍分佈介紹
(0755) 3656 3788

《方舟 生存進化》南方巨獸龍分佈介紹

📅 07-09 👀 2186
禁忌畸变
pc365buy

禁忌畸变

📅 09-08 👀 5263