1. 程式人生 > >編寫安全程式碼:小心volatile的原子性誤解

編寫安全程式碼:小心volatile的原子性誤解

這時,exit_flag都需要使用volatile來修飾。不然對於執行緒1的程式碼,如果編譯器發現線上程1的程式碼中沒有任何地方修改exit_flag,有可能會將exit_flag放入暫存器快取。這樣,在每次的條件檢查的時候,都是從暫存器中讀取,而非exit_flag對應的記憶體。這樣將導致每次讀取的值都為0,從而導致thread1無法退出。而使用volatile修飾exit_flag,會避免編譯器做這種優化,強制每次讀取都是從記憶體中讀取,這樣就可以保證了在exit_flag置為1時,thread1可以讀取到最新值而退出。