我對std :: atomic :: compare_exchange_weak的虛假故障感到困惑。如果值等於預期,std :: atomic :: compare_exchange_weak的虛假故障
- 如果原子變量的值是預期的值,可以compare_exchange_weak失敗嗎?
- 如果答案是肯定的:有沒有辦法知道這個值是否是預期值?因爲我的代碼假設如果CAS失敗,那麼該值不是預期的值。
- 特別是,即使在虛假故障的情況下,compare_exchange_weak是否會將「expected」參數設置爲當前值?在這種情況下,這個值可能是預期值(如果CAS由於某些時間問題而失敗......)或者不是?
編輯:澄清第三點:我沒有提到通過CAS改變變量值本身,而是改變了「預期」的說法參考。問題是compare_exchange_weak是否將此引用更改爲變量的當前值 - 通常都是這樣,特別是在出現虛假故障的情況下。我問這是因爲我的代碼假設在CAS之後,'expected'參數保存了當前值。 (根據我對第二個問題的回答,我認爲答案是「預期」的論點從來沒有在弱版本中更新過,正確嗎?)
@galym新增標準報價 –
謝謝。但它仍然沒有完全解決我的問題,因爲它只涉及預期和客體相等的情況,並且因爲它陳述「可能」,這聽起來不是保證。是否無法保證期望的引用是否通過compare_weak_exchange設置爲原子變量的當前值? – galym
@galym有三種可能的結果。 *「good」*:'expected' =='object'。將'desired'的值存儲到'object'中,'expected'沒有改變,但是它無關緊要,因爲它無論如何都等於object。 *「bad」*:'expected'!='object'。將真實的「對象」值加載到「預期」中。 *「虛假失敗」*:'預計'=='對象'。它仍然可以工作,就好像它是'壞'的情況:將真實的'object'值加載到'expected'中(實際上它不會像預期的那樣改變它等於object) –