首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用并发的错误值示例

使用并发的错误值示例
EN

Stack Overflow用户
提问于 2018-06-02 20:49:43
回答 1查看 40关注 0票数 -1

我正在写一本电子书,下面是我写的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func f(n int) {
  for i := 0; i < 10; i++ {
    fmt.Println(n, ":", i)
    amt := time.Duration(rand.Intn(250))
    time.Sleep(time.Millisecond * amt)
  }
}

func ConcurrMain() {
  for i := 0; i < 10; i++ {
    go f(i)
  }
  fmt.Println("hi")
}

问题是,我通过goclipse使用每个运行命令检索不同的值。当我不执行睡眠命令时,它似乎工作得更好。

在任何情况下,我认为任何循序渐进的解释对我学习并发都是有益的

下面是我的返回值与时间睡眠的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
4 : 0
1 : 0
6 : 0
0 : 0
5 : 0
7 : 0
8 : 0
2 : 0
3 : 0
9 : 0
9 : 1
hi

然后我再运行一次,现在我得到了时间睡眠:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 : 0
hi
1 : 0

现在是第三次了,我睡着了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 : 0
hi

这一次没有睡眠的我得到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 : 0
1 : 1
1 : 2
1 : 3
1 : 4
1 : 5
1 : 6
1 : 7
1 : 8
3 : 0
3 : 1
4 : 0
4 : 1
4 : 2
9 : 0
6 : 0
6 : 1
6 : 2
2 : 0
2 : 1
2 : 2
2 : 3
2 : 4
2 : 5
2 : 6
2 : 7
2 : 8
2 : 9
7 : 0
7 : 1
7 : 2
7 : 3
7 : 4
7 : 5
7 : 6
5 : 0
5 : 1
5 : 2
5 : 3
5 : 4
5 : 5
5 : 6
5 : 7
5 : 8
5 : 9
9 : 1
1 : 9
8 : 0
3 : 2
hi

如果该信息是相关的,我在windows下使用goclipse

更新

需要注意的是,此调用是从主包调用的,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func main()
{
   lab.ConcurrMain()
}

UPDATE2

我补充道:var wg sync.WaitGroup outside the func scope. I also addedwg.Add(1)inside theConcurrMainmethod just prior togo f(i), then i also addedwg.Wait()just after theforloop,它执行go functionand then finallywg.Done()inside thef()`方法**,这似乎是有效的,但这个答案在电子书中没有,所以我想要理解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 22:12:38

在go中,一个程序只有在它的主goroutine运行时才会运行。也就是说,最初运行main函数的goroutine,如果这个函数退出,整个程序就会退出。

在您最初给出的示例(代码片段)中,当您在ConcurrMain中启动的goroutines将被调度并运行时,没有什么需要强制执行的。在添加sync.WaitGroup之前,主goroutine可以在其他goroutine被调度之前退出。

如果主goroutine退出,则整个程序退出,其他goroutine将不会执行。主goroutine不会等待其他goroutine,除非您通过一个等待组明确要求它这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50661042

复制
相关文章
在tornadofx中使用javafx并发框架示例
1个枚举javafx.concurrent.Worker.State,代表Worker的不同状态READY,SCHEDULED,RUNNING,SUCCEEDED,CANCELLED,FAILED
用户6167008
2019/10/10
1.4K0
在tornadofx中使用javafx并发框架示例
【Java 并发编程】CountDownLatch 使用场景示例
1. 单个阻塞等待单个线程 : 初始化 CountDownLatch 时 , 设置其计数为 1 , 在线程 A 中调用 await() 阻塞 , 然后在线程 B 中执行操作 , 之后调用 countDown() 方法 , 计数 - 1 , 线程 A 阻塞解除 ;
韩曙亮
2023/03/27
3380
Rust常用并发示例代码
如果method1()被多次调用,就会创建多个线程,如果希望不管调用多少次,只能有1个线程,在不使用线程池的前提下,有1个简单的办法:
菩提树下的杨过
2022/09/28
1K0
Rust常用并发示例代码
sigaction检测段错误示例[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141285.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
8990
Spring Data默认值的错误
Spring Data有很多配置的默认值,但不一定都适合你。如一个依赖Cassandra 的项目,有时写入数据后,并不能立马读到。这种错误并没有什么报错,一切都是正常的,就是读不到数据。
JavaEdge
2023/01/15
1.1K0
[日常] Go语言圣经--示例: 并发的Echo服务
1.io.Copy()方法 func Copy(dst Writer, src Reader) (written int64, err error)
唯一Chat
2019/09/10
4230
[日常] Go语言圣经--示例: 并发的Echo服务
linux:sed修改xml中的值示例
上面的xml中有server.start,xhr.start,restful.start.等三个前缀不同后缀相同的字段。 现在希望通过shell脚本修改server.start字段为false.
10km
2021/12/17
3.3K0
Go错误集锦 | 函数何时使用带参数名的返回值
在Go语言中定义方法或函数时,我们不仅可以给函数(或方法)的返回值指定返回类型,而且也可以指定返回参数的名字。如下函数就指定了返回值的名字:
Go学堂
2023/01/31
2.6K0
Nginx 反向代理 Tomcat 错误示例
这篇文章的内容来源 2016年的两篇文章,当时使用 Nginx 反向代理 Tomcat/Resin 出现错误,发现是 proxy_redirect 指令导致的问题,错误的原因令人印象很深刻。
用户1560186
2019/11/19
1.3K0
[日常] Go语言圣经-示例: 并发的目录遍历习题
练习 8.9: 编写一个du工具,每隔一段时间将root目录下的目录大小计算并显示出来。
唯一Chat
2019/09/10
6230
[日常] Go语言圣经-示例: 并发的目录遍历习题
ArrayList并发写出现Null值
在我看百度看到的所有答案中,关于并发写出现Null值,几乎都是将原因归咎到add方法中的size++上,这里我个人认为这种回答应该是错误的,出现null值的原因应该是扩容所造成的。
每天学Java
2020/08/25
2.3K0
HashTable的使用示例
        // Create and initialize a new Hashtable.
Java架构师必看
2021/03/22
5560
simplifyEnrichment的使用示例
simplifyEnrichment主要针对富集分析的结果进行简化,并提供了一些强大的可视化函数。
医学和生信笔记
2023/08/30
7540
simplifyEnrichment的使用示例
Python新手常见错误之默认值设定错误
文章来源 |伯乐在线 云豆贴心提醒,本文阅读时间5分钟,文末有秘密! Python初学者通常会犯一些错误,甚至会因此损失很大的自信心。 不过你不必过多的担心这件事情,因为大部分人在这个时期都会犯错,而
小小科
2018/05/04
8820
Python新手常见错误之默认值设定错误
[日常] Go语言圣经--示例: 并发的Clock服务习题
练习 8.1: 修改clock2来支持传入参数作为端口号,然后写一个clockwall的程序,这个程序可以同时与多个clock服务器通信,从多服务器中读取时间,并且在一个表格中一次显示所有服务传回的结果,类似于你在某些办公室里看到的时钟墙。如果你有地理学上分布式的服务器可以用的话,让这些服务器跑在不同的机器上面;或者在同一台机器上跑多个不同的实例,这些实例监听不同的端口,假装自己在不同的时区。像下面这样:
唯一Chat
2019/09/10
7130
[日常] Go语言圣经--示例: 并发的Clock服务习题
并发工具的使用
  之前的文章中学习了J.U.C中aqs的底层实现原理,这篇文学习一下J.U.C中提供的一些线程同步工具类。
会说话的丶猫
2020/08/14
3430
Qt官方示例-并发运行函数
  QtConcurrent的Run函数示例演示如何将并发性应用于标准函数,使用QFuture实例等待获取返回值。
Qt君
2020/02/24
6500
点击加载更多

相似问题

并发示例混淆

12

并发数据结构的使用示例?

22

简单的Go并发示例

14

并发计算的示例问题

13

理解Clojure并发示例

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文