加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Semaphore 数据布局解析详解

发布时间:2021-05-26 10:11:13 所属栏目:编程 来源:互联网
导读://Go说话中袒露的semaphore实现 //详细的用法是提供sleep和wakeup原语 //以使其可以或许在其余同步原语中的竞争环境下行使 //因此这里的semaphore和Linux中的futex目

│     parent *sudog     │───┘ └─────────────────────────│     parent *sudog     │ 

├───────────────────────┤                               ├───────────────────────┤ 

│  elem unsafe.Pointer  │                               │  elem unsafe.Pointer  │ 

├───────────────────────┤                               ├───────────────────────┤ 

│     ticket uint32     │                               │     ticket uint32     │ 

└───────────────────────┘                               └───────────────────────┘ 

在这个 treap 布局里,从 elem 的视角(着实就是 lock 的 addr)来看,这个布局是个二叉搜刮树。从 ticket 的角度来看,整个布局就是一个小顶堆。

以是才叫树堆(treap)。

沟通 addr,即对统一个 mutex 上锁的 g,会阻塞在统一个地点上。这些阻塞在统一个地点上的 goroutine 会被打包成 sudog,构成一个链表。用 sudog 的 waitlink 相连:

┌──────────┐                         ┌──────────┐                          ┌──────────┐              

│  sudog   │                  ┌─────▶│  sudog   │                   ┌─────▶│  sudog   │              

├──────────┴────────────┐     │      ├──────────┴────────────┐      │      ├──────────┴────────────┐ 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读