1. 程式人生 > >i++ 是執行緒安全的嗎?

i++ 是執行緒安全的嗎?

i++不是原子操作,也就是說,它不是單獨一條指令,而是3條指令(3條彙編指令)

1、從記憶體中把i的值取出來放到CPU的暫存器中

2、CPU暫存器的值+1

3、把CPU暫存器的值寫回記憶體

由於執行緒共享棧區,不共享堆區和全域性區,所以當且僅當 i 位於棧上是安全的,反之不安全(++i也同理).   因為如果是全域性變數的話,同一程序中的不同執行緒都有可能訪問到。對於讀值,+1,寫值這三步操作,在這三步任何之間都可能會有CPU排程產生,造成i的值被修改,造成髒讀髒寫。

volatile不能解決這個執行緒安全問題。因為volatile只能保證可見性,不能保證原子性。