线程同步互斥

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

阅读 2.7k
4 个回答

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

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

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

  1. 你的问题就很泛泛而谈,不给示例代码怎么分析
  2. 拿Java做例子,全局变量是基础数据类型还是包装数据类型; 是否 是volatile修饰保证可见性;是否是Atomic类保证写入的原子性,这对结果分析都是不一样的。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进