32 lines
745 B
C++
32 lines
745 B
C++
|
#include <vector>
|
|||
|
#include <iostream>
|
|||
|
#include <thread>
|
|||
|
#include <atomic>
|
|||
|
|
|||
|
std::atomic<int> cnt = { 0 };
|
|||
|
|
|||
|
void f()
|
|||
|
{
|
|||
|
for (int n = 0; n < 1000; ++n) {
|
|||
|
cnt.fetch_add(1, std::memory_order_relaxed);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
std::vector<std::thread> v;
|
|||
|
for (int n = 0; n < 10; ++n) {
|
|||
|
v.emplace_back(f);
|
|||
|
}
|
|||
|
for (auto& t : v) {
|
|||
|
t.join();
|
|||
|
}
|
|||
|
std::cout << "Final counter value is " << cnt << '\n';
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* 带标签 memory_order_relaxed 的原子操作不是同步操作;它们不会为并发的内存访问行为添加顺序约束。它们只保证原子性和修改顺序的一致性。
|
|||
|
*
|
|||
|
* 宽松内存顺序的典型的应用是计数器自增,只要求原子性,但不要求顺序或同步
|
|||
|
*
|
|||
|
*/
|