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

Semaphore 数据结构分解详解

发布时间:2021-05-28 04:28:37 所属栏目:编程 来源:互联网
导读://Go语言中暴露的semaphore实现 //具体的用法是提供sleep和wakeup原语 //以使其能够在其它同步原语中的竞争情况下使用 //因此这里的semaphore和Linux中的futex目

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

对外封装

在 sema.go 里实现的内容,用 go:linkname 导出给 sync、poll 库来使用,也是在链接期做了些手脚:

//go:linkname sync_runtime_Semacquire sync.runtime_Semacquire 

func sync_runtime_Semacquire(addr *uint32) { 

    semacquire1(addr, false, semaBlockProfile) 

 

//go:linkname poll_runtime_Semacquire internal/poll.runtime_Semacquire 

func poll_runtime_Semacquire(addr *uint32) { 

    semacquire1(addr, false, semaBlockProfile) 

 

//go:linkname sync_runtime_Semrelease sync.runtime_Semrelease 

func sync_runtime_Semrelease(addr *uint32, handoff bool) { 

    semrelease1(addr, handoff) 

 

//go:linkname sync_runtime_SemacquireMutex sync.runtime_SemacquireMutex 

func sync_runtime_SemacquireMutex(addr *uint32, lifo bool) { 

    semacquire1(addr, lifo, semaBlockProfile|semaMutexProfile) 

 

//go:linkname poll_runtime_Semrelease internal/poll.runtime_Semrelease 

func poll_runtime_Semrelease(addr *uint32) { 

    semrelease(addr) 

(编辑:核心网)

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

热点阅读