请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

指令重排序问题

  1. 请问老师go语言里是否存在指令重排序呢?grade(score int) 目前是没有左边界的,并发访问grade(20)是否可能先执行了 case <= 100直接返回A呢 ?如果存在指令重排序,对于变量在多线程下的赋值是否存在类似volatile的关键字来避免指令重排序?

  2. 在Java中我做了实验,值匹配为第一个case并且break,其他case抛异常并且不退出,没有试出在多线程情况下重排序的问题,请问java中我的实验可能由于重排序抛异常吗直接退出吗?

  3. 在google的过程中发现了 go memory model 这样的词汇,不是很清楚这一块儿是不是很大的一块儿,在课程目录里没有发现类似的字眼,请问老师课程里会涉及这个吗?

正在回答

1回答

1. 请问老师go语言里是否存在指令重排序呢?grade(score int) 目前是没有左边界的,并发访问grade(20)是否可能先执行了 case <= 100直接返回A呢 ?如果存在指令重排序,对于变量在多线程下的赋值是否存在类似volatile的关键字来避免指令重排序?
这个取决于语言对switch中各个case顺序的规定。当然是规定了从上到下的。指令重排肯定有,不过不会把这些case重排。至于volatile,go语言的并发模型使得我们对volatile的需求大大降低。标准库里只是提供了一个atomic的数据类型供使用。

2. 在Java中我做了实验,值匹配为第一个case并且break,其他case抛异常并且不退出,没有试出在多线程情况下重排序的问题,请问java中我的实验可能由于重排序抛异常吗直接退出吗?
不可能,因为指令重排不是什么都重排的。case的顺序是规定了的。

3. 在google的过程中发现了 go memory model 这样的词汇,不是很清楚这一块儿是不是很大的一块儿,在课程目录里没有发现类似的字眼,请问老师课程里会涉及这个吗?
这门只是go语言的入门课,所以不会涉及memory model。不过我在另一门java面试的课程中,有一个小节提到了java memory model,涉及了指令重排,并且做了重排的演示。

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信