1. 程式人生 > >volatile不能保證程式執行的原子性以及只能一定程度上保證有序性

volatile不能保證程式執行的原子性以及只能一定程度上保證有序性

多執行緒併發程式設計如何正確的執行程式:

1、原子性:執行過程要麼成功要麼失敗,比如經典的銀行轉賬問題。

2、可見性:多執行緒併發時,一個執行緒修改了工作記憶體中的值(主存中的值),會立刻改變主存相應地址的值,其它執行緒工作記憶體的值無效,重新獲取主存的值。

3、有序性:程式執行的順序,單個執行緒中沒有依賴的程式碼,cpu會進行指令重排,使程式碼執行順序調換,但是不影響最終執行的結果(單執行緒沒有任何問題,多執行緒就會出現問題)

總結:解決多執行緒併發問題,需要程式滿足上面三個條件才能正確執行。

volatile能保證第二點可見性。

volatile能禁止指令重排序(所以volatile能在一定程度上保證有序性),但是這裡只能保證volatile所修飾的變數之前的程式不會在該變數之後執行,該變數之後的程式碼不會在變數之前執行。