併發編程中的三個問題:
- 原子性
- 可見行
- 有序性
涉及的問題:指令重排
指令重排對單線程沒有影響,但是對多線程,想要併發程序正確的執行,必須保證原子性、可見性、有序性。
Volatile保證可見行,但沒能保證原子性;而它禁止了指令重排,一定程度上保證了有序性。
自增操作不保證原子性,因爲是兩個步驟。
總結:對於volatile修飾的變量,一旦被修改,會存在以下操作:
- 強制將對緩存的修改立即寫入主存;
- 使其他cup中對應的緩存無效;
- 防止指令重排;
併發編程中的三個問題:
涉及的問題:指令重排
指令重排對單線程沒有影響,但是對多線程,想要併發程序正確的執行,必須保證原子性、可見性、有序性。
Volatile保證可見行,但沒能保證原子性;而它禁止了指令重排,一定程度上保證了有序性。
自增操作不保證原子性,因爲是兩個步驟。
總結:對於volatile修飾的變量,一旦被修改,會存在以下操作: