计算机系统:原子操作、 锁和信号量

您所在的位置:网站首页 互斥锁的原理及作用 计算机系统:原子操作、 锁和信号量

计算机系统:原子操作、 锁和信号量

2023-02-28 18:06| 来源: 网络整理| 查看: 265

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