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