在百度百科上关于_int64这种数据类型有这么一句话:
警告 在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态
Int64 字段,则该字段的最终值是无法预测的。
不是很理解这段话的意思。。。有什么通俗简单的解释么?
PHP中文网2017-04-17 13:52:07
就是32位元電腦上,對_int64類型的變數賦值或取值,在CPU指令的層級,是兩步驟操作,分別寫或讀取記憶體的前32位元和後32位元。如果在這2個CPU指令之間,其他執行緒對這個變數進行讀寫,就會發生並發問題。
例如:
線程1先寫了變數的前32位,
這時線程2寫了變數的前32位和後32位,
接下來線程1寫了變數的後32位。
最終結果,記憶體的前32位是線程2寫的,後32位是線程1寫的。最終記憶體中的資料是一個完全錯誤的資料。
ringa_lee2017-04-17 13:52:07
英特爾的32位元CPU保證無論幾個執行緒正在存取內存,同一時刻對同一位元組、雙位元組、四位元組只有一個執行緒在存取。
用32位元CPU讀寫八位元組數據,大多數編譯器在實現這個功能時,從程式設計的角度是進行了兩次四位元組數據的讀寫。那麼——你無法保證你讀寫第一個四位元組資料時,其他執行緒會不會正在寫讀第二個四位元組資料。