小编Lan*_*ceH的帖子

主线程从不屈服于goroutine

  • 编辑* - 取消注释两个运行时行并将Tick()更改为Sleep(),它按预期工作,每秒打印一个数字.保留代码,以便回答/评论是有道理的.

去版本go1.4.2 darwin/amd64

当我运行以下内容时,我从未看到任何打印过的内容go Counter().

package main

import (
  "fmt"
  "time"
  //"runtime"
)

var count int64 = 0

func main() {
  //runtime.GOMAXPROCS(2)
  fmt.Println("main")
  go Counter()
  fmt.Println("after Counter()")
  for {
    count++
  }
}

func Counter() {
  fmt.Println("In Counter()")
  for {
    fmt.Println(count)
    time.Tick(time.Second)
  }
}

> go run a.go
main
after Counter()
Run Code Online (Sandbox Code Playgroud)

如果我取消注释运行时的东西,我会得到一些奇怪的结果,如下所有一次打印(不是一秒钟):

> go run a.go
main
after Counter()
In Counter()
10062
36380
37351
38036
38643
39285
39859
40395
40904
43114
Run Code Online (Sandbox Code Playgroud)

我期望的是,go Counter()当主线程连续递增时,它将打印每秒的计数.我不是在寻找不同的代码来完成同样的事情.我的问题更多的是关于发生了什么以及我的期望在哪里错了?第二个结果特别没有任何意义,一次打印.据我所知,它们永远不应该打印得比一秒钟更近,对吧?

go

2
推荐指数
1
解决办法
402
查看次数

标签 统计

go ×1