簡介
- 一個變量被此修飾則表明是對所有線程可見的,滿足一致性 即各個線程的工作內存能立即發現該變量的改變並保證一致性。
- 防止指令重排序。
細節
一個變量被violate修飾,則被虛擬機解釋轉換成虛擬機識別的指令如下:
lock addl $Oxo,(%esp)
- 多一個lock
- 後面是空指令
- lock和nop不能同時執行
- lock作用
- 使CPU的Cache立即寫入內存,該寫入動作會使其他CPU的Cache無效化。也即是對變量進行了store和write操作。 所以通過這個帶lock前綴的空操作能試對violate修飾的變量的修改對其他CPU立即可見
- 設立了一個內存屏障,使後面的指令不能重排序到前面的指令。意味着所有之前的操作都已經執行完成了