我正在尝试比较锁定和无锁数据结构,我希望使用__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 的情况之一吗?
谢谢!