不是很理解互斥锁mutex 里面那些常量的值

Remember · 2020-10-18 11:20:29 · 1031 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-10-18 11:20:29 的主题,其中的信息可能已经有所发展或是发生改变。

const (
    mutexLocked = 1 << iota // mutex is locked
    mutexWoken
    mutexStarving
    mutexWaiterShift = iota

)

func main() {
    fmt.Println("mutexLocked的值",mutexLocked)
    fmt.Println("mutexWoken的值",mutexWoken)
    fmt.Println("mutexStarving的值",mutexStarving)
    fmt.Println("mutexWaiterShift的值",mutexWaiterShift)


   //为什么结果是:
mutexLocked的值 1
mutexWoken的值 2
mutexStarving的值 4
mutexWaiterShift的值 3
}

不是很明白


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1031 次点击  
加入收藏 微博
2 回复  |  直到 2020-10-19 21:09:35
avtion
avtion · #1 · 4年之前
  • 这个属于Golang基础,也是常被多数开发者忽略的方面,解释如下
mutexLocked = 1 << iota = 1 << 0 = 1 * 20次方 = 1
mutexWoken = 1 << iota = 1<< 1 = 1 * 21次方= 2
mutexStarving = 1 << iota = 1 << 2 = 1 * 22次方 = 4
mutexWaiterShift = iota = 3
  • 具体可以查阅以下文章

Go101 - 常量和变量 - 在常量声明中使用iota

iota是Go中预声明(内置)的一个特殊的有名常量。 iota被预声明为0,但是它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个常量描述的常量声明有意义。

Remember
Remember · #2 · 4年之前

感谢老哥

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传