zoukankan      html  css  js  c++  java
  • 原子操作

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

    再举个形象的例子:

    比如对于操作过程i++,它不是原子级的,共包含3个步骤:

    (1)栈中取出i

    (2)i自增1

    (3)将i存到栈

    现在有多线程来并发进行A操作,可能线程1正在进行步骤一即取出i,而线程三正在进行步骤三即将i存到栈中,这样子线程一和线程三就会互斥从而产生矛盾。

    解决方案:

    使用原子级的数据类型,代码如下:

    // 用原子数据类型作为共享资源的数据类型
    atomic_long total(0);
    //long total = 0;
     
    void click()
    {
        for(int i=0; i<1000000;++i)
        {
            // 仅仅是数据类型的不同而以,对其的访问形式与普通数据类型的资源并无区别
            total ++;
        }
    }
  • 相关阅读:
    正则表达式
    git指令
    前端测试 Jest/(Mocha) Typescript/Javascript Vueunitstest
    mpvue使用wxcharts.js显示各类图表
    css margintop 失效
    reduce 黑科技
    vue cli 项目创建
    css实现垂直水平居中
    MySQL基础教程之存储过程
    4组Alpha冲刺2/6
  • 原文地址:https://www.cnblogs.com/zf-blog/p/13433275.html
Copyright © 2011-2022 走看看