C++ Atomic::fetch_or() 函式



C++ 的std::atomic::fetch_or()函式用於對原子變數執行原子按位或操作。它透過與給定值執行按位或來修改原子變數。此函式確保以原子方式執行操作,從而防止資料競爭。

語法

以下是 std::atomic::fetch_or() 函式的語法。

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

引數

  • val − 指示要應用的值。
  • sync − 指示操作的同步模式。

返回值

此函式返回呼叫之前的包含值。

異常

此函式從不丟擲異常。

示例

在下面的示例中,我們將考慮 fetch_or() 函式的基本用法。

#include <iostream>
#include <atomic>
int main()
{
    std::atomic<int> x{0b1100};
    int a = x.fetch_or(0b1010);
    std::cout << "Old Value : " << a << std::endl;
    std::cout << "New Value: " << x << std::endl;
    return 0;
}

輸出

以上程式碼的輸出如下:

Old Value : 12
New Value: 14

示例

考慮以下示例,我們將使用 fetch_or() 函式進行多執行緒。

#include <atomic>
#include <iostream>
#include <thread>
std::atomic<int> x = 0b00110;
void a()
{
    x.fetch_or(0b11001);
}
int main()
{
    std::thread x1(a);
    std::thread x2(a);
    x1.join();
    x2.join();
    std::cout << "Result : " << x << std::endl;
    return 0;
}

輸出

以上程式碼的輸出如下:

Result : 31

示例

讓我們來看下面的例子,我們將使用帶有 std::memory_order_acq_rel 的 fetch_or() 函式。

#include <atomic>
#include <iostream>
int main()
{
    std::atomic<int> x = 12;
    int a = x.fetch_or(3, std::memory_order_acq_rel);
    std::cout << "Old value: " << a << std::endl;
    std::cout << "New value: " << x << std::endl;
    return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Old value: 12
New value: 15
atomic.htm
廣告