![](/img/trans.png)
[英]InterlockedCompareExchange64 vs std::atomic compare_exchange
[英]The usage of _InterlockedCompareExchange64
在MSDN上,我看到了
InterlockedCompareExchange64
要求參數為64對齊,
但對於
_InterlockedCompareExchange64
我沒有看到對齊的這種要求,並且提到了為InterlockedCompareExchange64提供編譯器內在支持。
那么,這是否意味着我可以使用_InterlockedCompareExchange64而無需關心對齊? 因為我不太清楚這里的對齊方式。
我很確定這是一個文檔錯誤,而不是兩個函數之間的任何直接差異 - 因為它們導致完全相同的CMPXCHG8B指令。 [當然假設你正在尋找它在SMP系統上實際上是原子的 - 但它是一個非常專業的指令,所以我懷疑它有很多其他用途]。
暗示,_underscore版本僅在定義_M_IA64或_M_AMD64時可用。 換句話說,當您將程序定位到64位處理器時。
您應該在代碼中使用非下划線版本。 當您以32位處理器為目標時,該功能在Windows中實現,您將獲得一個安全版本,該版本適用於未對齊的目標。 但是如果你的目標是64位處理器,那么你將自動獲得_underscore版本和內在版本。 WinBase.h中的宏湯負責處理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.