C++ 多线程 atomic

如有两个线程,对一个变量进行操作,一个线程读这个变量的值,一个线程往这个变量中写值。即使是一个简单变量的读取和写入操作,如果不加锁,也有可能会导致读写值混乱(一条语句可能会被拆成3、4条汇编语句来执行,所以仍然有可能混乱,如+=操作被拆为先读取再计算再写入)

使用std::mutex可以解决上述对临界资源访问的问题,有时开销会很大

原子性:指一个操作(或一组操作)不可被中断地执行完毕或不执行。具有原子性的操作不会受到其他并发操作的干扰,能够保证数据的一致性和正确性。通俗来说,原子性就是"一气呵成",不可分割的意思。在多线程编程中,原子性非常重要,因为如果一个操作不具备原子性,可能会导致数据出现错误或者不一致的情况(如上述的+=)。

std::atomic<T>包含在头文件<atomic>中,实现原子操作,不需要用到互斥量加锁(无锁)技术的多线程并发编程方式。从效率上来说,原子操作要比互斥量的方式效率要高。互斥量的加锁一般是针对一个代码段,而原子操作针对的一般都是一个变量。std::atomic来代表原子操作,是个类模板。其实std::atomic是用来封装某个类型的值。支持变量的++,--,+=,-=,&=,|=,^=操作的原子性。

参考:

【C++多线程】std::atomic<T> - Chen沉尘 - 博客园 (cnblogs.com)

原子性是什么意思?-CSDN博客

相关推荐

  1. C++ 线 atomic

    2023-12-07 22:40:04       64 阅读
  2. C++】线(二):std::mutex std::atomic的使用

    2023-12-07 22:40:04       61 阅读
  3. C++ 线

    2023-12-07 22:40:04       40 阅读
  4. C++ 线

    2023-12-07 22:40:04       50 阅读
  5. C#线

    2023-12-07 22:40:04       32 阅读
  6. C++ 线

    2023-12-07 22:40:04       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 22:40:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 22:40:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 22:40:04       87 阅读
  4. Python语言-面向对象

    2023-12-07 22:40:04       96 阅读

热门阅读

  1. 算法通关村——用4kb寻找重复元素

    2023-12-07 22:40:04       66 阅读
  2. CentOS一键安装docker脚本

    2023-12-07 22:40:04       57 阅读
  3. Nginx

    Nginx

    2023-12-07 22:40:04      54 阅读
  4. C语言的条件编译格式

    2023-12-07 22:40:04       50 阅读
  5. 浅谈类的封装

    2023-12-07 22:40:04       65 阅读
  6. 详细解读python里的列表

    2023-12-07 22:40:04       52 阅读