我有一個關於使用gcc的原子變量的虛擬問題。 我的機器支持__sync_add_and_fetch
功能;我在線程A中使用此調用來設置my_variable (int)
。C和gcc中的原子變量的平等測試
我希望線程B讀取該共享變量,以便根據一個值來測試它,例如, 20. 是否正確寫出以下
if(__sync_bool_compare_and_swap(&my_variable, 20, 20)){
//..Ok! It is 20 so go ahead!
}else{
// wrong: it is not ok.
}
如果沒看錯的GCC當有共享變量的競爭中__sync_val_compare_and_swap
可能會失敗,但我不知道它不會返回;它如何與__sync_bool_compare_and_swap
一起工作?
問題是什麼也發生,當同時線程A正在使用__sync_fetch_and_add
更改值?總是保證它會在__sync_bool_compare_and_swap
同時運行時返回總和事件的值?
理想情況下,爲了達到我的目的,我真的需要一個函數,它只執行一個原子READ,而不是一個Swap。有C或GCC這樣的東西?
非常感謝
AFG
如果您認爲此代碼有任何用處,我懷疑您的代碼中存在重大邏輯問題... – 2011-04-12 18:41:37