计算机系统:原子操作、 锁和信号量 |
您所在的位置:网站首页 › 互斥锁的原理及作用 › 计算机系统:原子操作、 锁和信号量 |
1、什么是原子操作 原子操作:能够操作最接近机器的指令,这个和硬件相关了,虽然和硬件相关,C++11还是整合了这一切,让原子操作有了共同的调用接口。 目的:使用这个的目的说实话,就是让你更了解机器已及多线程同步的原理和秘密,当然有一些需求较简单的,使用原子操作可能比封装好的更有效率!用了百遍的mutex可能你现在还不知道他们是怎么互斥的~当然内部还是通过了原子操作来的! 1.1、原子操作原理原子操作只有2种状态,一种是没做,一种是做完了, 没有正在做的状态,原子操作就是操作不可再分。在多线程环境,一个原子操作的执行过程无法被中断。 如:i++就不是一个原子操作,因为它是 3 个原子操作组合而成的: 读取 i 的值;计算 i+1;写入新的值。像这样的操作,在多线程 + 多核环境会造成竞争条件。 C++11 新标准发布以后,改变了这种困境,新标准提供了对整型变量原子操作的相关库,即 std::atomic ,这是一个模板类型: template struct atomic;读者可以传入具体的整型类型(如bool、char、short、int、uint等)对模板进行实例化,实际上stl库也提供了这些实例化的模板类型:可以参考cppreference 官方站点https://en.cppreference.com/w/cpp/atomic/atomic 如下例子: #include #include #include #include #include using namespace std; atomic num (0); //原子锁,安全的 // 线程函数,内部对num自增1000万次 void Add() { for(int i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |