正确使用__sync_bool_compare_and_swap吗?

时间:2019-02-21 19:03:39

标签: c multithreading gcc thread-safety

我正在尝试比较锁定和无锁数据结构,我希望使用__sync_bool_compare_and_swap方法described here

基本上,我需要支持的仅有两个操作是安全地增大和减小int的当前值,这就是我到目前为止实现的方式:

int withdraw(CAccount* account, int amount) {
    int expected;
    int new;
    int* pCurrent = &(account->balance);
    do {
        expected = *pCurrent;
        new = expected - amount;
    } while (!__sync_bool_compare_and_swap(pCurrent, expected, new));
    return amount;
}

我在其他地方找不到这种方法使用的任何示例,因此我不完全确定这是否意味着要使用它,因此如果不正确,请纠正我!

这也是方法的 val 版本优于 bool 的情况之一吗?

谢谢!

0 个答案:

没有答案