原子操作

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

再举个形象的例子:

比如对于操作过程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 ++;
    }
}
原文地址:https://www.cnblogs.com/zf-blog/p/13433275.html