gpt4 book ai didi

c++ - G++ CAS 的奇怪行为

转载 作者:行者123 更新时间:2023-11-27 23:32:26 25 4
gpt4 key购买 nike

考虑这段代码:

#include <iostream>
using namespace std;

int main()
{
bool lock = false;
lock = __sync_val_compare_and_swap( &lock, false, true );
cout << lock << endl;
}

我希望结果显示为 1 但 o/p 为 0。只需调用 __sync_val_compare_and_swap( &lock, false, true );(因此不会捕获返回值)然后显示锁定结果显示 1。

我在这里错过了什么?

最佳答案

来自 GCC doco:

bool __sync_bool_compare_and_swap (type *ptr, type oldval type newval, ...)type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...)

These builtins perform an atomic compare and swap. That is, if the current value of *ptr is oldval, then write newval into *ptr.

The “bool” version returns true if the comparison is successful and newval was written. The “val” version returns the contents of *ptr before the operation.

在我看来 0 是正确的值。我认为您错误地将“...操作前 *ptr 的内容”分配给 lock

这应该输出合理的结果:

#include <iostream>
using namespace std;

int main()
{
bool lock = false;
bool oldvalue = __sync_val_compare_and_swap( &lock, false, true );
cout << lock << ", " << oldvalue << endl;
}

关于c++ - G++ CAS 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com