公司网站维护由那个部门做,做网站时默认字体是微软雅黑,软装公司网站建设,修改wordpress主题字体大小1、std::memory_order_relaxed “自由”内存顺序在原子类型上的操作以自由序列执行#xff0c;没有任何同步关系#xff0c;仅对此操作要求原子性。例如#xff0c;在某一线程中#xff0c;先写入A#xff0c;再写入B。但是在多核处理器中观测到的顺序可能是先写入B#… 1、std::memory_order_relaxed “自由”内存顺序在原子类型上的操作以自由序列执行没有任何同步关系仅对此操作要求原子性。例如在某一线程中先写入A再写入B。但是在多核处理器中观测到的顺序可能是先写入B再写入A。自由内存顺序对于不同变量可以自由重排序。这是因为不同的CPU缓存和内部缓冲区在同样的存储空间中可以存储不同的值。对于非一致排序操作线程没有必要去保证一致性。上述代码z.load()!0有可能会返回false。在b线程中多核处理器观测到的顺序是随机的。b线程中的观测到的变量的并不会与线程a中的变量做同步没有任何顺序要求。2、std::memory_order_release “释放”内存顺序使用memory_order_release的原子操作当前线程的读写操作都不能重排到此操作之后。例如某一线程先写入A再写入B再以memeory_order_release操作写入C再写入D。在多核处理器中观测到的顺序AB只能在C之前不能出现C写入之后A或B再写入的情况。但是可能出现D重排到C之前的情况。memory_order_release用于发布数据放在写操作的最后。3、std::memory_order_acquire “获取”内存顺序使用memory_order_acquire的原子操作当前线程的读写操作都不能重排到此操作之前。例如某一线程先读取A再读取B再以memeory_order_acquire操作读取C再读取D。在多核处理器中观测到的顺序D只能在C之前不能出现先读取D最后读取C的情况。但是可能出现A或B重排到C之后的情况。memory_order_acquire用于获取数据放在读操作的最开始 。上述代码是使用“释放-获取模型对“自由”模型的改进。z.load() ! 0 返回的一定是true。首先a线程中y使用memory_order_release释放内存顺序在多核处理器观测到的顺序x的赋值肯定会位于y之前。b线程中y的获取操作是同步操作x的访问顺序必定在y之后观测到的x的访问值一定为true。“获取”与“释放”一般会成对出现用来同步线程。声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。