Golang 中国
package main

import (
    "fmt"
    "runtime"
)

func init() {
    fmt.Println("-", runtime.GOMAXPROCS(1))
    fmt.Println("--", runtime.NumCPU())
}

func main() {
    fmt.Println("---", runtime.GOMAXPROCS(-1))
    fmt.Println("----", runtime.NumCPU())

    var data int
    go func() { data++ }()
    if data == 0 {
        fmt.Println("the value is 0.")
    } else {
        fmt.Printf("the value is %v.\n", data)
    }
}

结果是:

- 4
-- 4
--- 1
---- 4
the value is 0.

为什么呢?


jimmykuu 于 2018-06-15 15:16 修改
5 回复
zhao6810
#1 zhao6810 • 2018-06-15 09:14

data 的值为0是对的。
首先你要了解什么是协程.

zhao6810
#2 zhao6810 • 2018-06-15 09:16

代码改造:

func init() {
    fmt.Println("-", runtime.GOMAXPROCS(1))
    fmt.Println("--", runtime.NumCPU())
}
func main() {
    fmt.Println("---", runtime.GOMAXPROCS(-1))
    fmt.Println("----", runtime.NumCPU())
    var data int
    ch := make(chan bool)
    go func() { data++; ch <- true }()
    <-ch
    if data == 0 {
        fmt.Println("the value is 0.")
    } else {
        fmt.Printf("the value is %v.\n", data)
    }
}

输出结果

- 4
-- 4
--- 1
---- 4
the value is 1.
samete
#3 samete • 2018-06-15 11:16

为什么cpu核数改变不了?

ioioj5
#4 ioioj5 • 2018-06-22 23:58
go func() { data++ }()

还没来的执行的时候, 就已经走到下面判断data的值, 然后int类型, 默认值是0 , 所以就是0了

496543679
#5 496543679 • 2018-06-24 08:41

runtime.NumCPU()返回系统有几个CPU核。这个值不会改变。

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。