synchronize voilatile汇编的代码有什么不同?
synchronize voilatile汇编有什么不同?
voilatile在汇编的时候会生成#lock前缀,进行总线锁定或者缓存锁定,
synchronize也是这样,那么他们之间在生成的汇编代码上有什么不同吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
synchronize 用到lock指令的地方是在对象头设置锁标志位 在代码上是对cas操作前加lock cmpxchg ...
voilatile 在汇编代码上在写操作之后加一句 lock addl $0x0,addl $0x0本身是个空操作,利用的是lock指令将内存刷回主存,而不是将voilatile变量地址锁住 所以他是没有原子性的
可以打印出来看下