1. 首页
  2. 主题
  3. Go语言

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

Remember · · 1287 次点击
```go 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 } ``` 不是很明白
- 这个属于`Golang基础`,也是常被多数开发者忽略的方面,解释如下 ```go mutexLocked = 1 &lt;&lt; iota = 1 &lt;&lt; 0 = 1 * 2的0次方 = 1 mutexWoken = 1 &lt;&lt; iota = 1&lt;&lt; 1 = 1 * 2的1次方= 2 mutexStarving = 1 &lt;&lt; iota = 1 &lt;&lt; 2 = 1 * 2的2次方 = 4 mutexWaiterShift = iota = 3 ``` - 具体可以查阅以下文章 [Go101 - 常量和变量 - 在常量声明中使用iota](https://gfw.go101.org/article/constants-and-variables.html) &gt; iota是Go中预声明(内置)的一个特殊的有名常量。 iota被预声明为0,但是它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个常量描述的常量声明有意义。
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中