GCC 提供了一些內(nèi)置的原子操作函數(shù)侵状,用于在多線程或并發(fā)編程中執(zhí)行原子操作。這些函數(shù)通常用于確保在多線程環(huán)境中對共享資源進(jìn)行安全訪問。下面是一些常用的 GCC 內(nèi)置原子操作函數(shù):
1.__atomic_fetch_add(type *ptr, type val, int memmodel):
原子地將 val 添加到 *ptr 指向的變量中,并返回添加前的值。
type 是變量的類型苗膝,可以是 int, long, long long 等。
memmodel 是內(nèi)存模型植旧,通常用 __ATOMIC_SEQ_CST 表示順序一致性內(nèi)存模型辱揭。
示例:
__atomic_fetch_add(&my_var, 1, __ATOMIC_SEQ_CST);
2.__atomic_fetch_sub(type *ptr, type val, int memmodel):
原子地從 *ptr 指向的變量中減去 val,并返回減去前的值病附。
參數(shù)與 __atomic_fetch_add 類似问窃。
3.__atomic_fetch_and(type *ptr, type val, int memmodel):
原子地對 *ptr 指向的變量執(zhí)行按位與操作。
參數(shù)與 __atomic_fetch_add 類似完沪。
4.__atomic_fetch_or(type *ptr, type val, int memmodel):
原子地對 *ptr 指向的變量執(zhí)行按位或操作泡躯。
參數(shù)與 __atomic_fetch_add 類似。
5.__atomic_fetch_xor(type *ptr, type val, int memmodel):
原子地對 *ptr 指向的變量執(zhí)行按位異或操作丽焊。
參數(shù)與 __atomic_fetch_add 類似较剃。
6.__atomic_compare_exchange(type *ptr, type *expected, type desired, bool weak, int success_memmodel, int failure_memmodel):
原子地比較 *ptr 指向的變量與 *expected 的值,如果相等則將 *ptr 更新為 desired技健,并將 *expected 更新為 *ptr 原先的值写穴。
weak 參數(shù)表示是否使用弱 CAS (compare-and-swap)。
success_memmodel 和 failure_memmodel 分別指定成功和失敗時的內(nèi)存模型雌贱。
示例:
int expected = 1;
int desired = 2;
__atomic_compare_exchange(&my_var, &expected, desired, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
這些函數(shù)使用了特殊的內(nèi)置類型和內(nèi)存模型啊送,確保在并發(fā)環(huán)境中執(zhí)行這些操作時不會產(chǎn)生競態(tài)條件。在使用這些函數(shù)時欣孤,應(yīng)當(dāng)詳細(xì)了解 GCC 文檔中提供的具體細(xì)節(jié)和注意事項(xiàng)馋没,以確保正確的并發(fā)控制和內(nèi)存模型選擇。