簡體   English   中英

對於64位Windows上的32位應用程序,是64位操作是原子操作

[英]Are 64 bit operations atomic for a 32 bit app on 64 bit Windows

因此,該文檔說,運行64位Windows可以為您提供64位原子性: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/ms684122%28v=vs.85%29.aspx

這篇文章表明您必須運行64位應用程序才能獲得64位原子性: 32/64位的原子

我正在開發Win32控制台應用程序。 因此,如果我理解正確,我必須使用32位類型來獲得原子性,對嗎? 我不能假設64位類型具有原子寫入/讀取?

在64位應用程序中,因為編譯器可以利用具有原子64位讀/寫操作的x64擴展指令集,所以64位讀/寫操作可以是自動的。

另一方面,在64位操作系統和硬件上的32位代碼中,如果應用需要讀取/寫入64位數據,則​​沒有可用的64位讀取/寫入指令,因此編譯器必須生成(至少)兩次讀/寫操作。 因為操作系統可以搶先兩次讀/寫之間的過程,所以您應該使用Interlockedxxx API。

注意:如果需要, 可以構建64位Win32控制台應用程序 在這種情況下,編譯器可以生成使用64位讀/寫操作的代碼。

當然,由於您的代碼可能想要讀取/寫入大於64位的數據類型(例如SSE2 / 3,AVX等),因此需要多個讀取/寫入操作,因此,您應該采用適當的內在函數來確保所需的操作是原子的。

我建議您不要使用編譯器為特定情況做正確的事情,而是建議使用必要的API和內在函數來明確聲明哪些操作必須是原子操作。 這樣,您就不必關心代碼是否針對x64,x64,ARM,MIPS等進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM