搜尋

首頁  >  問答  >  主體

c++ - 关于_int64的一点疑问

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

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

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

天蓬老师天蓬老师2774 天前400

全部回覆(3)我來回復

  • PHP中文网

    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寫的。最終記憶體中的資料是一個完全錯誤的資料。

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:52:07

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:52:07

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

    回覆
    0
  • 取消回覆