看板 C_and_CPP 關於我們 聯絡資訊
有兩個Widnows CE API,我分不清楚它們的區別,想請教 比較清楚的人。 (1) InterlockedCompareExchange(LPLONG a, LONG b, LONG c) (2) InterlockedTestExchange(LPLONG a, LONG b, LONG c) 網上找來的定義 http://msdn.microsoft.com/en-us/library/ms956784.aspx http://msdn.microsoft.com/en-us/library/ms683560(VS.85).aspx 這兩個函式我覺得做的事大概如下, (1) if(*a == c) *a = b; (2) if(*a == b) *a = c; 我覺得做的事情差不多,可是為麼會要分成兩個呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.128.177
softwind:Performs an "atomic" compare-and-exchange operation 04/04 19:59
tsaiminghan:我知道這兩個函式是atomic,但是不了解 04/04 20:05
tsaiminghan:為什麼會有兩個看起來機乎一樣的函式 04/04 20:05
tsaiminghan:想知道這兩個函式的差別在哪 04/04 20:06
wowtiger:如果按照指令 compare 和 test 差別就是 == 和 & 的差別 04/04 20:08
tsaiminghan:不好意思,我對指令不清楚。 04/04 20:13
tsaiminghan:&指的是什麼。 04/04 20:14
softwind:cmp/test 都是asm指令, 這邊應該不是指這個 04/04 20:16
softwind:The only difference between the two functions is 04/04 20:16
softwind:the order of the parameters. 04/04 20:16
tsaiminghan:謝謝,因為atomic。所以應該會跟asm有些關係 04/04 20:21
tsaiminghan:我猜可能是它保證aomic的asm不同? 04/04 20:21
softwind:猜? cmp/test是我說的 但我後面貼的是CE的doc 04/04 22:00
tsaiminghan:原來如此,謝謝你。 04/05 00:52