是要考虑并发的情况吧,结果是4当且仅当所有语句顺序执行的时候 结果是6也容易理解: (1)线程1执行完*x += *x,*x现在变为2 (2)线程1被打断,线程2进入,执行完*x += *x,*x现在变为4 (3)线程2被打断,线程1执行完*y += *x,*z += *y,即得到*z = 6了 注意到右结合操作符+=并非原子操作,结果为5也是可能的: (1)线程1执行*x += *x,先取右操作数*x,值为1,当取左操作数时被打断,线程2进入 (2)线程2执行完*x += *x,由于此时*x仍然为1,所以得到*x = 2,此时线程2也被打断,线程1继续执行 (3)线程1的+=操作取左操作数*x,值已经是2了,从而写回*x后,*x变为3,接着线程1执行完第二条和第三条语句,就得到*z = 5了 实际上,返回值等于7也是可能的: (1)线程1执行*x += *x,取右操作数*x,值为1,然后被打断,线程2进入 (2)线程2执行*x += *x,取右操作数*x,值为1,然后被打断,线程1继续 (3)线程1执行完*x += *x,取左操作数*x,值为1,加上1写回*x,*x变为2,然后被打断,线程3进入 (4)线程3执行完*x += *x,此时*x变为4,然后被打断,线程2继续 (5)线程2取左操作数*x,值为4,加上1写回*x,*x变为5,然后被打断,线程1继续 (6)线程1执行完*y += *x,*y变为6,执行完*z += *y,*z变为7
点赞 1

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务