专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

C关键字整理

  atomic #include
  原子操作(atomic): 互斥量的加锁一般是针对一个代码段,而原子操作针对的一般都是一个变量。原子变量既不可复制亦不可移动。 (1)它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。 是线程安全的。
  (2)原子数据类型不会发生数据竞争,能直接用在多线程中而不必我们用户对其进行添加互斥资源锁的类型。从实现上,大家可以理解为这些原子类型内部自己加了锁。
  (3)C++11中所有的原子类都是 不允许拷贝、不允许Move 的,atomic_flag也不例外。
  (4)C++11 对常见的原子操作进行了抽象,定义出统一的接口,并根据编译选项/环境产生平台相关的实现。新标准将原子操作定义为atomic模板类的成员函数,囊括了绝大多数典型的操作—— 读、写、比较、交换 等
  contained type
  atomic type
  bool
  atomic_bool
  char
  atomic_char
  signed char
  atomic_schar
  unsigned char
  atomic_uchar
  short
  atomic_short
  unsigned short
  atomic_ushort
  int
  atomic_int
  unsigned int
  atomic_uint
  long
  atomic_long
  unsigned long
  atomic_ulong
  long long
  atomic_llong
  unsigned long long
  atomic_ullong
  wchar_t
  atomic_wchar_t
  char16_t
  atomic_char16_t
  char32_t
  atomic_char32_t
  intmax_t
  atomic_intmax_t
  uintmax_t
  atomic_uintmax_t
  int_least N _t
  atomic_int_least N _t
  uint_least N _t
  atomic_uint_least N _t
  int_fast N _t
  atomic_int_fast N _t
  uint_fast N _t
  atomic_uint_fast N _t
  intptr_t
  atomic_intptr_t
  uintptr_t
  atomic_uintptr_t
  size_t
  atomic_size_t
  ptrdiff_t
  atomic_ptrdiff_t
  (4)macro
  macro
  relative to types
  ATOMIC_BOOL_LOCK_FREE
  bool
  ATOMIC_CHAR_LOCK_FREE char
  signed char
  unsigned char
  ATOMIC_SHORT_LOCK_FREE short
  unsigned short
  ATOMIC_INT_LOCK_FREE int
  unsigned int
  ATOMIC_LONG_LOCK_FREE long
  unsigned long
  ATOMIC_LLONG_LOCK_FREE long long
  unsigned long long
  ATOMIC_WCHAR_T_LOCK_FREE
  wchar_t
  ATOMIC_CHAR16_T_LOCK_FREE
  char16_t
  ATOMIC_CHAR32_T_LOCK_FREE
  char32_t
  ATOMIC_POINTER_LOCK_FREE U*
  (for any type U)
  (5)memory_order:内存顺序
  序号
  值
  意义
  1
  memory_order_relaxed   宽松模型,不对执行顺序做保证   2
  memory_order_consume 当前线程中,满足happens-before原则。   当前线程中该原子的所有后续操作,必须在本条操作完成之后执行   3
  memory_order_acquire 当前线程中, 读 操作满足happens-before原则。   所有后续的 读 操作必须在本操作完成后执行   4
  memory_order_release 当前线程中, 写 操作满足happens-before原则。   所有后续的 写 操作必须在本操作完成后执行   5
  memory_order_acq_rel   当前线程中,同时满足memory_order_acquire和memory_order_release   6
  memory_order_seq_cst   最强约束。全部读写都按顺序执行   (6)Functions   (7)std::atomic的限制:trivially copyable( 可平凡复制): 一个类型如果是trivially copyable,则使用memcpy这种方式把它的数据从一个地方拷贝出来会得到相同的结果。   1.没有non-trivial 的拷贝构造函数   2.没有non-trivial的move构造函数   3.没有non-trivial的赋值操作符   4.没有non-trivial的move赋值操作符   5.有一个trivial的析构函数std::atomic_flag: 最简单的原子变量实例, 是对于bool类型的变量进行原子操作,提供了标志的管理,标志有三种状态:clear、set和未初始化状态。   接口介绍:   (1)ATOMIC_FLAG_INIT: 用于给atomic_flag变量赋初值,如果定义后为赋值,则状态是不确定的。被这个赋值后的状态为false。   (2)test_and_set() : 接口函数,调用后状态变为true,并返回改变状态前的状态值 。   (3)clear() : 接口函数,调用后状态变为false。#include   #include   #include   #include   std::atomic_flag lock = ATOMIC_FLAG_INIT ;   int gcnt = 0;   void f(int n)   {   for (int cnt = 0; cnt < 100; ++cnt) {   while (lock.test_and_set(std::memory_order_acquire) ) // 获得锁   ; // 自旋   std::cout << "Output from thread " << n << " ";   gcnt++;   lock.clear(std::memory_order_release ); // 释放锁   }   }   int main()   {   std::vector v;   for (int n = 0; n < 10; ++n) {   v.emplace_back(f, n);   }   for (auto& t : v) {   t.join();   }   }   自旋锁的解释 :当某一个线程调用‘lock.test_and_set’时,即设置lock的状态为true,当另一个线程进入时,再次调用test_and_set时返回的状态为true,则一直在while循环中不断获取,即实现了等待,直到第一个线程调用clear将状态变为false。std::atomic: 通过atomic模板类可以对更多的类型进行原子操作   (1)is_lock_free: 通过这个接口判断是否需要加锁。如果是,则在多个线程访问该对象时不会导致线程阻塞(可能使用某种事务内存transactional memory方法实现lock-free的特性)。事实上该函数可以做为一个静态函数。所有指定相同类型T的atomic实例的is_lock_free函数都会返回相同值。   (2)store: 赋值操作。operator=实际上内部调用了store,并返回d。   void store(T desr, memory_order m = memory_order_seq_cst) noexcept;   void store(T desr, memory_order m = memory_order_seq_cst) volatile noexcept;   T operator =(T d) noexcept;   T operator =(T d) volatile noexcept;   (3)load: 读取,加载并返回变量的值。operator T是load的简化版,内部调用的是load(memory_order_seq_cst)形式。   (4)exchange: 交换,赋值后返回变量赋值前的值。exchange也称为read-modify-write操作。   T exchange(T desr, memory_order m = memory_order_seq_cst) volatile noexcept;   T exchange(T desr, memory_order m = memory_order_seq_cst) noexcept;   (5)compare_exchange_weak: 这就是有名的CAS(Compare And Swap: 比较并交换)。操作是原子的,排它的。其它线程如果想要读取或修改该原子对象时,会等待先该操作完成。   (6)compare_exchange_strong:   进行compare时,与weak版一样,都是比较的物理内容。与weak版不同的是,strong版本不会返回伪false。即:原子对象所封装的值如果与expect在物理内容上相同,strong版本一定会返回true。其所付出的代价是:在某些需要循环检测的算法,或某些平台下,其性能较compare_exchange_weak要差。但对于某些不需要采用循环检测的算法而言, 通常采用compare_exchange_strong 更好。   std::atomic特化:   (1)fetch_add: 该函数将原子对象封装的值加上v,同时返回原子对象的旧值。其功能用伪代码表示为:   // T is integral   T fetch_add(T v, memory_order m = memory_order_seq_cst) volatile noexcept;   T fetch_add(T v, memory_order m = memory_order_seq_cst) noexcept;   // T is pointer   T fetch_add(ptrdiff_t v, memory_order m = memory_order_seq_cst) volatile noexcept;   T fetch_add(ptrdiff_t v, memory_order m = memory_order_seq_cst) noexcept;   (2)fetch_sub: 该函数将原子对象封装的值减去v,同时返回原子对象的旧值。其功能用伪代码表示为:   // T is integral   T fetch_sub(T v, memory_order m = memory_order_seq_cst) volatile noexcept;   T fetch_sub(T v, memory_order m = memory_order_seq_cst) noexcept;   // T is pointer   T fetch_sub(ptrdiff_t v, memory_order m = memory_order_seq_cst) volatile noexcept;   T fetch_sub(ptrdiff_t v, memory_order m = memory_order_seq_cst) noexcept;   (3)++, --, +=, -=: 不管是基于整数的特化,还是指针特化,atomic均支持这四种操作。其用法与未封装时一样   独属于数值型特化的原子操作 - 位操作:   (1)fetch_and,fetch_or,fetch_xor:   位操作,将contained按指定方式进行位操作,并返回contained的旧值。   integral fetch_and(integral v, memory_order m = memory_order_seq_cst) volatile noexcept;   integral fetch_and(integral v, memory_order m = memory_order_seq_cst) noexcept;   integral fetch_or(integral v, memory_order m = memory_order_seq_cst) volatile noexcept;   integral fetch_or(integral v, memory_order m = memory_order_seq_cst) noexcept;   integral fetch_xor(integral v, memory_order m = memory_order_seq_cst) volatile noexcept;   integral fetch_xor(integral v, memory_order m = memory_order_seq_cst) noexcept;   (2)perator &=,operator |=,operator ^=: 与相应的fetch_*操作不同的是,operator操作返回的是新值   T operator &=(T v) volatile noexcept {return fetch_and(v) & v;}   T operator &=(T v) noexcept {return fetch_and(v) & v;}   T operator |=(T v) volatile noexcept {return fetch_or(v) | v;}   T operator |=(T v) noexcept {return fetch_or(v) | v;}   T operator ^=(T v) volatile noexcept {return fetch_xor(v) ^ v;}   T operator ^=(T v) noexcept {return fetch_xor(v) ^ v;}

球王会体育破晓杯TT实力不容小觑,TQ遗憾落败球王会体育英雄联盟手游破晓被一直深受众人的期待,而在11月13号的时候,这一场赛事终于是拉开了序幕,在11月16号的时候,我们能够看到TT与TQ的一场精彩对决,不得不说的是这一场赛战地204211。19发售,致敬玩家的3A新作品质如何?战地2042还未正式发售就已经斩获了Steam周销量榜第一,经历了多次跳票后,战地2042已于11月19日发售。一款还没发售的游戏能斩获周销榜第一,战地2042有着怎样的魔力?一切王者荣耀玩家认为,夏侯惇的弱势在于大招位移过长,这种说法你认同吗?hello大家好,我是可爱且魅力四射,迷人但不失风度的熊猫。夏侯惇这名英雄在游戏当中呢还算是一名不错的英雄吧,我认为强度一直都在中上,并不算是弱势!夏侯惇有肉有输出,在团战当中完全打BOSS不只靠武器?幻塔战斗高端技巧,忽略了它们少一半输出但凡是玩游戏,基本都会对打BOSS很熟悉,它考验着玩家的战斗技巧和输出能力,而武器又是影响输出能力的重要因素。这也就导致大多数游戏产品在武器上花费了不少心思,对应的玩家也记住了诸如金蝉能否成为上位法师一哥?诸葛亮被削,嬴政是最大的对手令人期待的金蝉,终于出现在了游戏中,定位为法师和辅助的英雄,毫无疑问,他也会成为最近一段时间,中路最常出现的英雄,那么他最后在法师排名中会处于什么位置呢?诸葛亮惨遭削弱,干将只能望打王者荣耀被人骂的最难听的话是什么?没有图片,没截屏我一个女生,记得最清楚的有两次玩妲己,逆风局,快输了,本来想蹲对面残血打野,蹲到了狄仁杰,击杀,然后再次蹲草,结果又是狄仁杰,然后他就开始说话了,第一句我不记得是什国服中单被逼转型?北枫男刀打野,无解支援称霸峡谷之巅为什么现在绝活哥主播的处境越来越不好,段位越高越会被克制拿不到自己拿手英雄,在峡谷之巅有很多的绝活哥但一天下来玩不了多少自己的拿手英雄,所以很多主播都被迫练了很多的英雄,但是英雄熟中日韩主播对抗赛含金量十足?格局遗憾独一档,天灰灰打出风采近日,伴随着中日韩亚洲对抗赛的圆满落幕,因为是赛区与赛区主播之间的对决,来自中国赛区的两支主播队伍DYU与DYD成功在决赛中分别击败了猪让队与核皇队的韩国队伍,帮助中国主播队夺得了2021年DNF职业联赛老盟主仇东升夺得冠军神佛难挡,从败者组一路打败7人,夺得冠军!在2021DNF职业联赛中,中国选手仇东升越打越猛,从败者组一路打败7人,夺得冠军,奠定了目前中韩pk第一人的宝座。在此之前,仇东升因为作Fami通一周销量榜出炉生化危机8二次登顶Fami通公开了最新一周(5月10日5月16日)日本游戏软硬件销量榜,软件方面,生化危机8村庄第二次登顶榜首,同为卡普空旗下的怪物猎人崛起位居第二,上周榜首New宝可梦随乐拍降至第Uzi和Gala闪现反应对比图火了,大嘴一赶四,RNG和我没关系了前言S11赛季的比赛正在如火如荼地进行中,相信绝大多数的玩家都关注了,最近一段时间的Msi。Rng战队作为lpl赛区春季赛的冠军,整体的状态和发挥是非常出色的,在目前的比赛中已经拿
热血传奇血饮剑与骨玉权杖相比,哪个属性更适合法师使用?我是多多,继续讲解传奇,降妖除魔戒指可以说是一件属性比较全面的装备了,而且和金手镯一样,在游戏中很大几率会出现极品属性的降妖除魔戒指。降妖除魔戒指的价格也很亲民,一般的玩家都是能够AG月光发文换种方式守护情怀,重新投入工作,AG月光光即将链接这次的KPL季后赛,还是比较让大家感到意外的,备受粉丝们看好的AG超玩会,竟然在第一轮比赛就淘汰出局,无缘后续赛程,而且失去了参与挑战者杯(冬冠杯)的机会。这是AG超玩会重返KPL魔兽世界怀旧服赛季服满级后必须做的几件事情大家好,我是分身有术,很高兴又跟大家见面了。随着魔兽世界赛季服的开放,越来越多的玩家达到了满级,满级之后对于一些萌新玩家来说,并不知道应该干什么,那么今天分身和大家聊下,满级之后我为什么不ban猛犸?剑三JPL联赛官方自ban药宗,抢到先手赢一半剑网三这一届的JPL联赛也要开始了,官方先下手为强,起手直接ban了药宗。也就是参赛队伍都不可以使用药宗作战,毕竟药宗的强度大家也是有目共睹的。不然很可能就会出现玩家怒问为什么不bTES新的银河战舰正式连线2021生机大会TES这队管理层才是最终的顶级拉扯。拉扯的神knight(国产中单的天花板)第一次从SN转会出来也是几个队抢人,拉扯了好久结果让垫底队top拿到了。然后jkl从IG终于等到你!战舰世界研发局携俄亥俄号强势登场国服在硬核军武游戏战舰世界中,象征着巨舰大炮主义的战列舰永远是舰长们无法割舍的浪漫。对于广大战列舰的拥趸者来说,俄亥俄号凭借强大的攻击防御和辅助能力,成为他们心心念念的白月光。而这艘已狼队4比0战胜TES,Fly老夫子绝了,观众这就是季后赛的飞牛如果你也看了KPL的季后赛,那么就知道狼队经以40的成绩战胜了TES,并且锁定了四强,大家也觉得狼队的进步很大,而且黎洛教练的bp水平不输给老林,即便是林教练现在无法上场,但也的确这些好玩的功能到了NS全没了,实属遗憾Switch的成功大家都有目共睹,主掌机一体的设计甚至已然是许多玩家的刚需。然而在这台一边标新立异,一边又回归传统的游戏机上,许多以前花里胡哨的玩法也都销声匿迹。瞬缘连接NS不玩的生化危机4民间HD版新视频明年2月2日推出近日生化危机4民间HD版项目制作者Albertmarin公布了新视频,展示了重制前后的画面对比。这款粉丝作品将于2022年2月2日推出,敬请期待。对比视频优酷视频云Albert对这我国海上巨无霸横空出世,海盗游戏ATLAS出现海上变形金刚众所周知,航母作为当今世界上最为强大的水面舰艇,不仅是现代海军不可或缺的神兵利器,还由于其集数十种尖端技术于一体,对一个国家的经济科技工业实力要求很高,成为综合国力的象征之一。目前方块方舟玩家打造出铁质防具,穿上后弱小恐龙都难咬动方块方舟是一款上线于Steam的生存沙盒游戏,在这款游戏中玩家可以感受到齐全的沙盒玩法,在这个世界生存能遭遇许多意想不到的事情,比方说被恐龙追杀,被魔法生物袭击等等。想要在方块方舟
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软件