?文章來源:http://www.zghlxwxcb.cn/news/detail-807548.html
在 C++11 中,原子變量(std::atomic)提供了一種線程安全的方式來操作共享變量。下面是一個簡單的例子,演示了C++11原子變量的用法。
#include <iostream>
#include <atomic>
#include <thread>
std::atomic<int> counter(0); // 聲明一個原子整數(shù)變量
void incrementCounter(int id, int iterations) {
for (int i = 0; i < iterations; ++i) {
counter++; // 原子操作,無需額外的鎖
}
}
int main() {
const int numThreads = 5;
const int iterationsPerThread = 100000;
std::thread threads[numThreads];
// 啟動多個線程,每個線程增加計(jì)數(shù)器
for (int i = 0; i < numThreads; ++i) {
threads[i] = std::thread(incrementCounter, i, iterationsPerThread);
}
// 等待所有線程完成
for (int i = 0; i < numThreads; ++i) {
threads[i].join();
}
std::cout << "Final counter value: " << counter << std::endl;
return 0;
}
注意事項(xiàng):
- 原子性操作:?原子變量提供了原子性操作,避免了多線程同時訪問共享變量時的競爭條件。
- 無鎖:?使用原子變量的操作是無鎖的,因此在高并發(fā)的情況下可以獲得更好的性能。
- 適用類型:?std::atomic?模板支持多種類型,例如整數(shù)、指針等。
- 適用操作:?可以使用各種操作符和成員函數(shù)進(jìn)行原子操作,如?++, --, +=, -=, =, exchange, compare_exchange_weak?等。
- 內(nèi)存序:?可以指定內(nèi)存序(memory order)來控制操作的同步順序。
原理:
原子變量的實(shí)現(xiàn)通常涉及硬件級別的原子操作或使用操作系統(tǒng)提供的原子指令。在多線程環(huán)境下,這些操作保證了對變量的操作是原子的,不會被其他線程中斷。在具體的實(shí)現(xiàn)中,可能使用了硬件指令(如 x86 的?lock?前綴指令)或者操作系統(tǒng)提供的原子操作函數(shù)。
需要注意的是,雖然原子變量提供了一些程度上的線程安全性,但在設(shè)計(jì)多線程程序時,仍需注意整體的線程安全性,例如避免競爭條件和死鎖。
?
文章來源地址http://www.zghlxwxcb.cn/news/detail-807548.html
到了這里,關(guān)于C++11原子變量:線程安全、無鎖操作的實(shí)例解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!