2012-01-11 61 views
0

似乎fetch_add是win(請參閱後的評論以及)支持這兩個CPU的CAS循環。硬件支持原子獲取和添加與獲取和/或

切換清除位以設置位時,可以使用按位或加法操作。結果將是相同的。我預計每個人的表現都是平等的。因此,決定使用哪種操作將取決於操作的硬件支持差異(如果有的話,我沒有提供任何有關處理器支持的信息)。

是否有任何理由相對於其他在這種情況下?

+0

我不認爲抓取和添加可以用來實現一般的抓取和/或。 – 2012-01-11 23:17:25

+0

不,但對於我提到的設置已經清除的位的具體情況,可能沒有進位 - 加法完全等於按位或。 – Eloff 2012-01-11 23:24:13

+1

我在第一條評論中得到的結論是,即使對於想要設置清晰的位的情況,我也不認爲可以使用「讀取 - 添加」來實現「讀取 - 或者設置那些(並且只有那些)位。假設您有兩個進程同時嘗試設置這些位。每個都可以檢查並發現這些位當前是清除的,並添加適當的常量以有效設置這些位;然而,這個常數會被添加兩次。我沒有看到你如何繞過這種情況(即沒有計劃進位)。 – 2012-01-11 23:54:48

回答

1

你可能想要做的,而不是編碼一個特定的處理器架構,是使用編譯器本身。例如,GCCClang支持幾種原子構建,其中之一是__sync_fetch_and_or

由於Visual Studio 2005,Visual C++支持_InterlockedOron all architectures

+0

這回答了我關於硬件支持的問題,謝謝! – Eloff 2012-01-12 14:28:39