2010-07-26 58 views
29

在執行「LOCK」之後的指令時,x86 ASM「LOCK」命令前綴是否會導致所有內核凍結?關於多核CPU的x86 LOCK問題

我在博客文章中閱讀了這篇文章,但沒有任何意義。我找不到任何表明這是否屬實的事。

+0

相關討論這更:?可NUM ++是原子的「廉政NUM」(https://stackoverflow.com/questions/39393850/can-num-be -atomic-for-int-num),其中我的答案更多地解釋了鎖定指令如何在內部執行。 – 2017-10-31 07:43:42

回答

41

這是關於鎖定該地址的內存總線。 The Intel 64 and IA-32 Architectures Software Developer's Manual - Volume 3A: System Programming Guide, Part 1告訴我們:

7.1.4 LOCK操作對內部處理器高速緩存的影響。

對於英特爾486和Pentium處理器中,LOCK#信號總是 一個LOCK 操作期間斷言總線上,即使存儲器 被鎖定的區域在 處理器被緩存。

對於P6和更近的處理器 家庭,如果存儲器的區域中的LOCK操作期間被鎖定 是 緩存在是 執行LOCK操作 回寫存儲器並且是完全 處理器包含在緩存行中, 處理器可能不會在總線上聲明LOCK# 信號。相反,它會 內部修改內存位置 並允許[其]緩存一致性 機制確保操作 是原子執行的。這個 操作被稱爲「緩存鎖定」。 高速緩存一致性機制 會自動防止具有相同區域內存的兩個或多個處理器同時修改該區域中的 數據。 (強調增加)

在這裏我們瞭解到,P6和更新的芯片足夠聰明,以確定他們是否真的必須阻止公共汽車或只能依靠智能緩存。我認爲這是一個整潔的優化。

我在我的博客文章「How Do Locks Lock?

+0

謝謝傑夫!這是一個很好的幫助:) – IamIC 2010-07-27 10:22:44

+0

傑夫,感謝填補空白並提供參考。很高興看到更新的處理器在鎖定方面有點智能。 – 2010-07-27 14:11:30

+0

謝謝,這只是我在搜索鎖前綴時希望找到的信息:) – cib 2012-04-29 07:36:07

6

不,但它可能會強制其他處理器在此存儲器訪問時等待。這些等待狀態是否有所作爲取決於處理器從緩存中運行的程度。