c++ - 关于_int64的一点疑问
天蓬老师
天蓬老师 2017-04-17 13:50:07
0
3
398

在百度百科上关于_int64这种数据类型有这么一句话:

警告 在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态
Int64 字段,则该字段的最终值是无法预测的。

不是很理解这段话的意思。。。有什么通俗简单的解释么?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(3)
Ty80

就是32位元電腦上,對_int64類型的變數賦值或取值,在CPU指令的層級,是兩步驟操作,分別寫或讀取記憶體的前32位元和後32位元。如果在這2個CPU指令之間,其他執行緒對這個變數進行讀寫,就會發生並發問題。
例如:
線程1先寫了變數的前32位,
這時線程2寫了變數的前32位和後32位,
接下來線程1寫了變數的後32位。
最終結果,記憶體的前32位是線程2寫的,後32位是線程1寫的。最終記憶體中的資料是一個完全錯誤的資料。

PHPzhong

這個是多執行緒啊,就是說Int64 不是原子操作,多執行緒操作的時候會出現常見的並發問題

左手右手慢动作

英特爾的32位元CPU保證無論幾個執行緒正在存取內存,同一時刻對同一位元組、雙位元組、四位元組只有一個執行緒在存取。
用32位元CPU讀寫八位元組數據,大多數編譯器在實現這個功能時,從程式設計的角度是進行了兩次四位元組數據的讀寫。那麼——你無法保證你讀寫第一個四位元組資料時,其他執行緒會不會正在寫讀第二個四位元組資料。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板