计算机系统应用教程网站

网站首页 > 技术文章 正文

Go语言中互斥锁(Mutex)的两种操作模式:正常模式和饥饿模式

btikc 2024-10-12 10:46:16 技术文章 9 ℃ 0 评论

1、正常模式

  • 在正常模式下,等待互斥锁的协程(goroutine)会按照先进先出(FIFO)的顺序排队。
  • 被唤醒的协程并不直接获得互斥锁,而是要与新到达的协程竞争锁的所有权。
  • 新到达的协程有优势,因为它们可能已经在CPU上运行,且数量可能很多,导致被唤醒的协程可能再次竞争失败,并被排到等待队列的前端。
  • 如果一个等待者超过1毫秒未能获取到互斥锁,互斥锁会切换到饥饿模式。

2、饥饿模式

  • 在饥饿模式下,互斥锁的所有权直接从解锁的协程传递给等待队列前端的等待者。
  • 新到达的协程不会尝试获取互斥锁,即使互斥锁看起来未被锁定,也不会自旋。
  • 它们会将自己排到等待队列的末尾。

3、模式切换

  • 如果一个等待者获得了互斥锁,并且满足以下条件之一,它会将互斥锁切换回正常操作模式:(1) 它是队列中的最后一个等待者。(2) 它的等待时间少于1毫秒。

简而言之,Go语言中互斥锁的两种操作模式,以及它们如何影响协程获取互斥锁的方式和顺序。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表