C++ Atomic::store() 函数



C++ 的std::atomic::store()函数用于将原子变量的当前值替换为新值,确保没有其他线程可以中断此操作。store() 函数接受一个值和一个可选的内存顺序参数,该参数命令同步行为。

语法

以下是 std::atomic::store() 函数的语法。

void store (T val, memory_order sync = memory_order_seq_cst) volatile noexcept;
void store (T val, memory_order sync = memory_order_seq_cst) noexcept;

参数

  • val − 指示要复制到包含对象的的值。
  • sync − 指示操作的同步模式。

返回值

此函数不返回任何内容。

异常

此成员函数从不抛出异常。

示例

在以下示例中,我们将考虑 store() 函数的基本用法。

#include <iostream>
#include <atomic>
int main()
{
    std::atomic<int> a{0};
    int x = 12;
    a.store(x);
    std::cout << "Stored value: " << a.load() << std::endl;
    return 0;
}

输出

上述代码的输出如下:

Stored value: 12

示例

考虑以下示例,我们将使用带有 std::memory_order_relaxed 的 store() 函数。

#include <atomic>
#include <iostream>
int main()
{
    std::atomic<int> a;
    int x = 7;
    a.store(x, std::memory_order_release);
    std::cout << "Stored value: " << a.load(std::memory_order_acquire) << std::endl;
    return 0;
}

输出

以下是上述代码的输出:

Stored value: 7

示例

让我们来看下面的例子,其中 compare_exchange_strong 检查 x 是否等于 a。如果为真,则自动存储“b 值”。

#include <atomic>
#include <iostream>
int main()
{
    std::atomic<char> x('A');
    char a = 'A';
    char b = 'B';
    x.compare_exchange_strong(a, b);
    std::cout << "New value: " << x.load() << std::endl;
    return 0;
}

输出

如果我们运行上述代码,它将生成以下输出:

New value: B
atomic.htm
广告