线程同步互斥

发布于 2022-09-11 20:43:10 字数 64 浏览 17 评论 0

多个线程对一个全局变量做加法,假设全局变量初始值为0,2个线程,每个线程循环3次对全局变量加一,怎么分析可能的结果

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

知你几分 2022-09-18 20:43:10

加一是指自增,这个是原子的吗?原子的话最后是6。不是原子的话,就不一定是多少了。

具体可能结果,跟指令集、内存模型啥的都会有关 ...

乖乖哒 2022-09-18 20:43:10

你是想问什么,一般多线程操作全局变量是要上lock的,不上lock分析个啥,要是多核cpu那可说不准等于几……

〗斷ホ乔殘χμё〖 2022-09-18 20:43:10
  1. 你的问题就很泛泛而谈,不给示例代码怎么分析
  2. 拿Java做例子,全局变量是基础数据类型还是包装数据类型; 是否 是volatile修饰保证可见性;是否是Atomic类保证写入的原子性,这对结果分析都是不一样的。
冰之心 2022-09-18 20:43:10

自己结一下题,问题可能问的不是很清晰,分析的话要可以从汇编的运算去理解,先把数据读到寄存器,然后执行操作,再写回对应地址空间,当多个线程需要运作时,系统会利用时间片轮转方式调度线程,每段时间只有一个线程在工作,不断轮转线程队列,然而当轮转到下一个线程,当前线程还没有完成最后的写入操作就被暂停放入队尾,当该线程再次被轮转,继续上次的写入工作,产生写入覆盖。因此最后的结果很大概率比预想的小,具体是多少值确实很多情况,不好分析。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文