【原子操作】顺序操作

简介: 【原子操作】顺序操作

atomic.cpp

#include <atomic>
#include <iostream>
#include <thread>
std::atomic<int> count = {0};
// g++ atomic.cpp -lpthread -std=c++14 -latomic
struct A {
    float x;
    int y;
    long long z;
};
int main()
{
#if 0    
    std::thread t1([]{
        while(1){
            if(count == 0){
                std::cout<< "t1:1"<<'\n';
                count.fetch_add(1);
            }
        }
    });
    std::thread t2([]{
        while(1){
            if(count == 1){
                std::cout<< "t2:2"<<'\n';
                count.fetch_sub(1);
            }
        }
    });
    t1.join();
    t2.join();
 #endif   
    std::atomic<A> a;
    std::cout << std::boolalpha << ":" << a.is_lock_free() << std::endl;
    return 0;
}
相关文章
|
Cloud Native Go C语言
C 语言的 互斥锁、自旋锁、原子操作
C 语言的 互斥锁、自旋锁、原子操作
|
存储 编译器 API
锁与原子操作CAS
锁与原子操作CAS
147 0
|
3月前
|
存储 算法
什么是原子操作?
【8月更文挑战第24天】
64 0
|
3月前
|
缓存 Java 编译器
|
5月前
|
安全 程序员 C++
C++一分钟之-原子操作与线程安全
【6月更文挑战第27天】**C++的`std::atomic`提供线程安全的原子操作,解决多线程数据竞争。涵盖原子操作概念、应用、问题与对策。例如,用于计数器、标志位,但选择数据类型、内存顺序及操作组合需谨慎。正确使用能避免锁,提升并发性能。代码示例展示自旋锁和线程安全计数。了解并恰当运用原子操作至关重要。**
93 1
多线程的原子操作
多线程的原子操作
65 0
|
6月前
|
算法
原子操作CAS
原子操作CAS
38 0
|
6月前
|
缓存 Linux API
原子操作CAS与锁实现
原子操作CAS与锁实现
|
6月前
|
存储 缓存 算法
理解原子操作与CAS锁
理解原子操作与CAS锁
80 0
互斥锁、自旋锁、原子操作
互斥锁、自旋锁、原子操作