我仍然不確定是否我不理解或文檔沒有明確的表述。 以下摘錄已採取從最新的草案(N3126,部分29.6):std :: atomic | compare_exchange_weak與compare_exchange_strong
bool atomic_compare_exchange_weak(volatile A* object, C * expected, C desired);
bool atomic_compare_exchange_weak(A* object, C * expected, C desired);
bool atomic_compare_exchange_strong(volatile A* object, C * expected, C desired);
bool atomic_compare_exchange_strong(A* object, C * expected, C desired);
bool atomic_compare_exchange_weak_explicit(volatile A* object, C * expected, C desired, memory_order success, memory_order failure);
bool atomic_compare_exchange_weak_explicit(A* object, C * expected, C desired, memory_order success, memory_order failure);
bool atomic_compare_exchange_strong_explicit(volatile A* object, C * expected, C desired, memory_order success, memory_order failure);
bool atomic_compare_exchange_strong_explicit(A* object, C * expected, C desired, memory_order success, memory_order failure);
bool A::compare_exchange_weak(C & expected, C desired, memory_order success, memory_order failure) volatile;
bool A::compare_exchange_weak(C & expected, C desired, memory_order success, memory_order failure);
bool A::compare_exchange_strong(C & expected, C desired, memory_order success, memory_order failure) volatile;
bool A::compare_exchange_strong(C & expected, C desired, memory_order success, memory_order failure);
bool A::compare_exchange_weak(C & expected, C desired, memory_order order = memory_order_seq_cst) volatile;
bool A::compare_exchange_weak(C & expected, C desired, memory_order order = memory_order_seq_cst);
bool A::compare_exchange_strong(C & expected, C desired, memory_order order = memory_order_seq_cst) volatile;
bool A::compare_exchange_strong(C & expected, C desired, memory_order order = memory_order_seq_cst);
備註:弱比較和交換 操作可能會意外失敗,也 是,返回false而留下 指向的內存內容 預計在操作之前是 與對象 相同,與預期的 之後的操作相同。 [注意:這種虛假的 故障使得能夠在更廣泛的 類別的機器(例如,裝載鎖定的 存儲條件機器)上執行 比較和交換。 A 虛假故障的後果是 幾乎所有使用弱 比較和交換將在 循環。
那麼,這是什麼意思?首先,它可能虛假地出現?!它爲什麼這樣做?他們如何定義'可能'?其次,我不知道爲什麼,但我仍然不知道「_strong」和「_weak」後綴的功能有什麼區別。
希望有人能幫忙;) 最好的問候。
編輯: 這就是我的libstdC++已經找到 - 執行(atomic_0.h):
bool compare_exchange_weak(
__integral_type& __i1,
__integral_type __i2,
memory_order __m1,
memory_order __m2
)
{
__glibcxx_assert(__m2 != memory_order_release);
__glibcxx_assert(__m2 != memory_order_acq_rel);
__glibcxx_assert(__m2 <= __m1);
return _ATOMIC_CMPEXCHNG_(this, &__i1, __i2, __m1);
}
bool compare_exchange_strong(
__integral_type& __i1,
__integral_type __i2,
memory_order __m1,
memory_order __m2
)
{
__glibcxx_assert(__m2 != memory_order_release);
__glibcxx_assert(__m2 != memory_order_acq_rel);
__glibcxx_assert(__m2 <= __m1);
return _ATOMIC_CMPEXCHNG_(this, &__i1, __i2, __m1);
}
我添加了STL標籤,希望它能帶來Howard Hinnant,他一直在用libC++來實現這些,所以他應該知道這個。 – 2011-02-09 12:30:01