一道面试题目

Posted 奔跑吧Linux社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道面试题目相关的知识,希望对你有一定的参考价值。

前几天有一个小伙伴和笨叔抱怨,最近去某个互联网大厂面试,遇到一道骚题目,题目是这样的:

在arm64 SMP系统里,执行如下代码片段,a和b的初始值都为0.

CPU0先执行了a=1和b=1,然后CPU1执行while的判断语句,最后执行assert()语句,请问,有没有可能assert会失败?如何fix?



一道面试题目_while循环



这位小伙伴和面试官说,有可能是CPU0执行了乱序,比如CPU乱序或者编译器乱序导致的。面试官说,这道题目的执行次序是这样的,CPU0先执行了a=1和b=1,然后CPU1才执行while循环的,你在想想assert会不会失败?



一道面试题目_while循环_02



这位小伙伴被搞晕了:还有这么骚的面试题目,晕了~~


笨叔觉得这个题目有蹊跷,必须从体系结构的缓存一致性协议和内存屏障结合的地方来入手,中西医结合。一条简单load和store指令在SMP中并不简单,需要结合MESI协议来分析的。


笨叔把这个题目的讲解,放到了第三季旗舰篇视频课程里:arm64体系结构与编程。


一道面试题目_体系结构_03


一道面试题目_内存屏障_04一道面试题目_体系结构_05




一道面试题目_while循环_06



一道面试题目_体系结构_07



一道面试题目_内存屏障_08



一道面试题目_体系结构_09




同时,卷2也会讲解这个题目,卷2大约在2022年3月前后出版。


一道面试题目_内存屏障_10

发布于 2022-02-09 20:39

以上是关于一道面试题目的主要内容,如果未能解决你的问题,请参考以下文章

一道别人分享的阿里面试题

有关java类对象初始化的话题,从一道面试题切入

一道常被人轻视的前端JS面试题

又一道小题

你不可不知的final-初始化时机(失手率比较高的一道面试题)

微软的一道网红Java面试题