当前位置: 首页 > article >正文

C++多线程——原子操作(atomic)

一、原子操作(可以实现无锁队列)

  所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。原子操作不需要加锁。

  原子类型对象的主要特点就是从不同线程访问不会导致数据竞争(data race)。因此从不同线程访问某个原子对象是良性 (well-defined) 行为,而通常对于非原子类型而言,并发访问某个对象(如果不做任何同步操作)会导致未定义 (undifined) 行为发生。

二、原子操作demo

#include <iostream>
#include <thread>
#include <atomic> 
#include <ctime>
using namespace std;

atomic<int> cnt(0);

void fun()
{
    for (int i = 0; i < 100000; ++i)
    {
        ++cnt;
    }
}

int main()
{
    clock_t start_time = clock();
    
    thread threads[100];
    for (int i = 0; i != 100; ++i)
    {
        threads[i] = thread(fun);
    }
    for (auto &th : threads)
        th.join();
    
    clock_t end_time = clock();
    cout << "Running time is: " << static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC*1000 <<
         "ms" << endl;
    system("pause");
    return 0;
}

http://www.kler.cn/a/419716.html

相关文章:

  • Day4:生信新手笔记 — R语言简单命令与Rstudio配置
  • Android笔记【12】脚手架Scaffold和导航Navigation
  • 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  • brew安装mongodb和php-mongodb扩展新手教程
  • Algorithm:河内之塔
  • 【C++】编程题目分析与实现回顾:从浮点数运算到整型转换的全面解读
  • Ardusub源码剖析——control_manual.cpp
  • 【网络安全设备系列】1、防火墙
  • Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录
  • 二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(2)
  • 【深度学习】利用Java DL4J 优化金融投资组合
  • Equirectangular to Perspective(E2P)算法详解(附代码)
  • 从最浅层剖析C语言————第六节(深入了解数组传参、嵌套调用以及链式访问)
  • UI设计从入门到进阶,全能实战课
  • 源码分析之Openlayers的核心EventTarget类的实现
  • Python 列表操作详解
  • 深入解析数据结构:红黑树、哈希Map、B树与B+树的底层逻辑
  • ctfhub web技能树篇
  • 基于 PostgreSQL 和 PostGIS 数据服务器模式的设计方案
  • 高斯消元——acwing
  • C++stack、queue
  • npm安装依赖后报错
  • 【计算机网络】实验6:IPV4地址的构造超网及IP数据报
  • Go运行Grule引擎实现计费规则管理
  • 【Linux】开启你的Linux之旅:初学者指令指南
  • LeetCode27.移除元素