C++11 引入了原子類型(std::atomic
),它提供了一種在多線程環(huán)境中安全地執(zhí)行操作的方法。原子操作主要用于以下幾種場景:
std::atomic<int> shared_counter(0);
// 線程 1
shared_counter++;
// 線程 2
shared_counter--;
template <typename T>
class lock_free_stack {
private:
struct Node {
T data;
Node* next;
Node(T data) : data(data), next(nullptr) {}
};
Node* head;
Node* tail;
std::atomic<Node*> atomic_head;
std::atomic<Node*> atomic_tail;
public:
lock_free_stack() : head(nullptr), tail(nullptr), atomic_head(nullptr), atomic_tail(nullptr) {}
// 其他成員函數(shù),如 push、pop 等
};
std::atomic<bool> task_completed(false);
// 線程 1
task_completed = true;
// 線程 2
if (task_completed) {
// 處理任務(wù)完成后的邏輯
}
memory_order_relaxed
、memory_order_acquire
、memory_order_release
和 memory_order_seq_cst
。這些內(nèi)存順序可以用于控制編譯器和處理器對原子操作的優(yōu)化,以確保正確的同步行為。std::atomic<int> shared_data(0);
// 線程 1
shared_data.store(1, std::memory_order_release);
// 線程 2
int value = shared_data.load(std::memory_order_acquire);
總之,C++原子操作在多線程編程中非常有用,它們可以幫助程序員編寫更安全、更高效的多線程代碼。