2009-10-23 51 views
0

我在執行一些關鍵速度多線程代碼。如果我確實知道某些基本的寫入操作是原子性的,我可以避免出現一些關鍵部分。我剛剛閱讀了一篇學術論文,其中我看到以下內容:運行時間檢測 - 原子操作

「基本類型大小爲t,int,float和pointer的寫入必須是原子的。一個線程的寫入必須由其他線程以相同的順序看到。用於大多數現代標準計算機的IA-32和Intel-64 CPU架構保證了這些假設。「

我想這樣做是爲了能夠在運行時的處理器是否是一種類型,這些操作都是原子的檢測。 - 我想這也適用於AMD處理器。

+1

AMD處理器支持IA32 CPU架構,並且它們限定從中Intel64位來源的AMD64構建築系統。 – MSalters 2009-10-23 10:20:25

+0

有趣。想知道什麼是論文,以及在編譯器優化時如何保證。如果你正在談論組裝好,我相信。否則,我發現很難吞下。 – 2009-10-23 18:54:54

+0

這裏的紙: www.cs.ualberta.ca/~mmueller/ps/enzenberger-mueller-acg12.pdf 我不知道你所說的「你想怎麼在編譯器的優化存在出示擔保」的意思。誰說我想要? – Mick 2009-10-27 10:13:27

回答

2

這聽起來是多餘的。 .EXE可能只是int main() { return true; }。無論它運行,而答案是正確的,或者操作系統無法運行.EXE在所有的因爲...處理器類型不匹配.EXE類型。

+0

但我可以製作兩個不同的版本 - 一個是關鍵部分,另一個是沒有的部分。我想在快速測試中加入測試,以便能夠正常退出而不是崩潰或產生錯誤的答案。 – Mick 2009-10-23 09:42:58

+1

不需要。只需使用'InterlockedIncrementAcquire',它可以在任何地方使用最快的算法。即使在伊坦尼克。 – MSalters 2009-10-23 10:15:22

+0

InterlockedIncrementAcquire是特定於Win32的。 – alexkr 2009-10-23 11:45:46

1

我知道這是題外話,但如果你打算寫鎖免費代碼,您應該definatly由Herb薩特從文章閱讀第一Lock-Free Code: A False Sense of Security

報價:

無鎖碼具有兩大缺陷 的缺點。首先,它不是廣義的 用於解決典型的 問題 - 很多基本數據結構,甚至雙向鏈表, 仍然沒有已知的無鎖 實現。提出一個新的 或改進的無鎖數據結構 仍然會賺你在一個審過的雜誌, 有時學位至少 發表的論文。

1

爲了避免陷入這些CPU /平臺的具體問題,你可以考慮:

等待的std ::在C++ 0x中標準原子(已經可用於GCC)

使用Intel TBB

使用ACE_Atomic_Op